Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用外键值在JPA2中创建criteriaquery?_Java_Jpa 2.0_Criteriaquery - Fatal编程技术网

Java 是否可以使用外键值在JPA2中创建criteriaquery?

Java 是否可以使用外键值在JPA2中创建criteriaquery?,java,jpa-2.0,criteriaquery,Java,Jpa 2.0,Criteriaquery,假设我有两个由一对多关系连接的表 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(mapped

假设我有两个由一对多关系连接的表

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,而不仅仅是像这样的本机查询

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

提前谢谢你

我找到了一些解决办法。不确定它是否是JPA2规范的一部分,但是对于hibernate,我能够将另一个属性映射到相同的DB列。我只需要使用insertable=false、updateable=false将其设置为只读

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

只是一个注释,如果您更改了master属性,masterId不会立即更改,您需要持久化实体并从EntityManager刷新它。。。
_entityManager.createNativeQuery( "SELECT s FROM master s WHERE s.master = ?1" );
query.setParameter( 1, XXX );
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;
}