簡體   English   中英

EmbeddedId和session.load

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM