[英]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.