我有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查询,我该怎么办?
答案 0 :(得分:2)
您不应在主键中嵌入firstName和lastName。 userId应该是您的主键,您应该在[firstName,lastName]上添加唯一约束。顺便说一句,将这些附加字段放在主键中仅保证[idUser,firstName,lastName]是唯一的,但是您可能仍然有两个用户具有不同的idUsers,但具有相同的[firstName,lastName]。
现在回答原来的问题,我不知道问题出在哪里:
UserId userId = new UserId("theId", "theFirstName", "theLastName");
User user = (User) session.load(User.class, userId);
答案 1 :(得分:1)
如果您实际上不需要复合键,或许最好使用@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;
}