我有三个表,一个主表MAIN_TB,其中包含表TCHARS和TSTATUSES的外键,当我持久化MAIN_TB,重新查询并显示保存的记录时,连接的列(来自TCHARS的tchars和来自TSTATUSES的t_status)为空但是数据已保存。我能错过什么?
表MAIN_TB
@JoinColumn(name = "T_STATUS", referencedColumnName = "T_STATUS")
@ManyToOne
private Tstatuses tStatus;
@JoinColumn(name = "T_CHAR", referencedColumnName = "T_CHAR")
@ManyToOne
private Tchars tChar;
表TCHARS
@OneToMany(mappedBy = "tChar")
private Collection<MainTb> mainTbCollection;
表TSTATUSES
@OneToMany(mappedBy = "tStatus")
private Collection<MainTb> mainTbCollection;
代码
public void saveMainTb(){
MainTb mainTb = new MainTb();
Tchars tchars = new Tchars();
Tstatuses tstatuses = new Tstatuses();
tchars.setTChar(new Short("1"));
mainTb.setTChar(tchars);
tstatuses.setTStatus(new Short("1"));
mainTb.setTStatus(tstatuses);
mainTb.setTName("test");
em.persist(mainTb);
}
结果
![Result][1]
任何帮助将不胜感激
答案 0 :(得分:0)
因为在拥有方或反方没有指定级联。我估计您可以尝试以下代码来手动保存所有实体实例:
em.persist(tchars);
em.persist(tstatuses);
mainTb.setTChar(tchars);
mainTb.setTStatus(tstatuses);
em.persist(mainTb);
答案 1 :(得分:0)
您可以将以下代码添加到 tStatus 和 tChar 。
fetch=FetchType.EAGER
如果您不需要总是获取上述2个对象,这将达到性能。
相反,您可以在查询中添加fetch
子句,以获取两个子对象( tStatus 和 tChar )以及您的{{ 1}}对象。这将为您省去麻烦并获取您在mainTb
子句中指定的所有子对象。性能优化器。