[英]embeddedId and session.load
我有3个主键,如以下示例所示:
@Entity
class User {
@EmbeddedId
@AttributeOverride(name="firstName", column=@Column(name="fld_firstname")
UserId id;
Integer age;
}
@Embeddable
class UserId implements Serializable {
String firstName;
String lastName;
String idUser;
}
在我的应用程序中,当我运行session.load(persistenceClass,idClass)时,应返回其idUser为idClass的用户。 (我知道这并非易事,但用户的ID是唯一的,名字和姓氏也是主键,因为不能有多个用户使用相同的用户名和密码)。
如何在不为每个类自定义SQL查询的情况下做到这一点?
您不应在主键中嵌入firstName和lastName。 userId应该是您的主键,并且应该在[firstName,lastName]上添加唯一约束。 顺便说一句,将这些附加字段放在主键中只能保证[idUser,firstName,lastName]是唯一的,但是您可能仍然有两个用户具有不同的idUser,但具有相同的[firstName,lastName]。
现在回答原始问题,我不知道问题出在哪里:
UserId userId = new UserId("theId", "theFirstName", "theLastName");
User user = (User) session.load(User.class, userId);
如果您实际上不需要复合键,则最好使用@UniqueContraint
来确保唯一性:
@Entity
@Table(uniqueConstraints =
@UniqueConstraint(columnNames = {"idUser", "fld_firstName", "lastName"}))
class User {
@Id
String idUser;
@Column(name="fld_firstname")
String firstName;
String lastName;
Integer age;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.