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