[英]Hibernate annotation OnetoOne relationship
我有一個關鍵問題。 我有桌子
TICKETINFOID pk,備注varchar(128),TICKETDATE時間戳
它有一個帶有休眠注釋的對應類,看起來像這樣
@Entity
@Table(name = "TICKETINFO")
public class Ticketinfo implements Serializable {
@Id
@Column(name = "TICKETINFOID")
private Long id;
@Column(name = "TICKETDATE")
private String date;
@column(name = "REMARK")
private string remark;
//getters and setters
}
現在我的工作是我需要創建一個TICKETINFO表的子表
TICKETINFO_REMARK_ID pk,TICKETINFOID fk,REMARK varchar(128)
TICKETINFOID是TICKETINFO表中的外鍵,並且必須為相應的TICKETINFOID填充TICKETINFO_REMARK的REMARK字段以及TICKETINFO的REMARK字段。
對於1個TICKETINFOID,將有一個REMARK,並且它可以為null。 Ticketinfo.java中REMARK的數據類型必須保留為字符串。我可以添加額外的邏輯,但不能更改現有流程。
請幫助我,因為我陷入了嚴重的混亂。
聽起來一對一會完成子表的鏈接。 對於備注本身,您可能要劫持訪問器和更改器,因為我認為Hibernate不會開箱即用地處理您想要的東西。 如果您將某些內容作為另一個表的屬性,則以這種方式進行偽造不是正交或最佳實踐。 如果您不能更改它,請保持原樣,除非您有非常充分的理由將奇怪的軟糖寫入代碼中。
您可以將REMARK字段設置為@Transient,並使用@PreUpdate @PrePersist和@PostLoad方法將注釋字段從一對一映射的TICKETINFO_REMARK實體加載和保存。 可以在TICKETINFO_REMARK一側執行相同的操作。
這是一個簡單的示例,未經測試,只是為了給您一個想法。
@Entity
@Table(name = "TICKETINFO")
public class Ticketinfo implements Serializable {
@Id
@Column(name = "TICKETINFOID")
private Long id;
@Column(name = "TICKETDATE")
private String date;
@Transient
private string remark;
@OneToOne
@PrimaryKeyJoinColumn
private TicketinfoRemark ticketInfoRemark;
@PostLoad
public void postLoad() {
if (ticketInfoRemark != null)
this.remark = ticketInfoRemark.getRemark();
}
@PreUpdate
@PrePersist
public void prePersist() {
if (ticketInfoRemark != null)
ticketInfoRemark.setRemark(this.remark);
}
//getters and setters
}
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.