0

假设我有 2 个通过一对多关系连接的表

public class Slave
{
   @Id
   @Column(name = "id")
   long id;

   @JoinColumn(name = "master", referencedColumnName = "id")
   Master master;
}

public class Master
{
   @Id
   @Column(name = "id")
   long id;

   @OneToMany(mappedBy = "master", targetEntity = Slave.class)
   Collection<Slave> slaves;
}

是否可以创建 CriteriaQuery 以选择具有已知 id 的 Master 的所有 Slaves?要生成这样的 SQL:

SELECT * FROM slave s WHERE s.master=XXX;

它不应该CriteriaQuery只是像这样的“本机查询”

_entityManager.createNativeQuery( "SELECT s FROM master s WHERE s.master = ?1" );
query.setParameter( 1, XXX );

先感谢您

4

1 回答 1

0

我找到了一些解决方法。不确定它是否是 JPA2 规范的一部分,但是对于休眠,我能够将另一个属性映射到与 Long 相同的 DB 列。我只需要使用它使其只读insertable=false, updatable=false

public class Slave
{
   @Id
   @Column(name = "id")
   long id;

   @Column(name = "master", insertable=false, updatable=false)
   long masterId;
   @JoinColumn(name = "master", referencedColumnName = "id")
   Master master;
}

然后我刚刚使用这个属性创建了 CriteriaQuery

于 2014-10-03T13:52:51.807 回答