我有一个与TempA实体有关系的实体A,如下所示:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID")
private TempA tempA;
然后在doInHibernate中我调用了这个
Criteria c = session.createCriteria(A.class);
c.add(Restrictions.eq("id", code));
Object result = c.uniqueResult();
然后我收到了错误。 TempA是一个共享表,因此其他服务实际上可以插入此表中。我需要的是防止hibernate调用这个TempA。我能够阻止它与A进行左连接,但是,它仍会导致此错误。
答案 0 :(得分:0)
在开始时 - 加入列的名称不应该是" ID"。 Id列是主对象Id的列。这个应该叫做tempA_id。然后,如果你想得到这个tempA objcet你应该使用
criteria.createAlias(tempA, tempA)
告诉hibernate他必须使用join,然后调用类似
c.add(Restrictions.eq("tempA.id", code));
但更短的版本是:
c.add(Restrictions.eq("tempA", tempA_instance));
你可以对所有事物进行对象和休眠操作。