0

我有三个表,一个主表 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]

任何帮助,将不胜感激

4

2 回答 2

0

您可以将以下代码添加到您的tStatustChar中。

fetch=FetchType.EAGER

如果您不需要获取上述 2 个对象,这将影响性能。

相反,您可以fetch在查询中添加该子句,以获取两个子对象(tStatustChar)以及您的mainTb对象。这将为您省去麻烦并获取您在fetch子句中指定的所有子对象。性能优化器。

于 2013-02-18T09:46:23.193 回答
0

因为在拥有方或反向方都没有指定级联。我认为您可以尝试以下代码来手动保存所有实体实例:

em.persist(tchars);
em.persist(tstatuses);
mainTb.setTChar(tchars);
mainTb.setTStatus(tstatuses);
em.persist(mainTb);
于 2013-02-18T09:41:36.693 回答