Hibernate Query:从连接表中获取Class的数据

时间:2015-11-30 11:45:30

标签: java sql hibernate hql

我有2个Hibernate类设置: (以下简称为清晰起见)

ClassOne

@Entity
@Table( name = "SCHEMA.TBLONE" )
public class ClassOne {

@Id
@Column( name = "DCDINO" )
private String idField;
@Column( name = "DCGNUM", nullable = false )
private String fieldTwo;
@OneToOne( mappedBy = "classOne" )
@Cascade( value = org.hibernate.annotations.CascadeType.ALL )
private ClassTwo classTwo;

ClassTwo

@Entity
@Table( name = "SCHEMA.TBLTWO" )
public class ClassTwo {

@Id
@Column( name = "DDDINO", nullable = false )
private String idField;
@Column( name = "DDFRNM", nullable = false )
private String fieldTwo;
@OneToOne
@PrimaryKeyJoinColumn
private ClassOne classOne;

可以看出,2个表被连接并共享'idField' 当我对数据库进行查询时,所有内容都正确地连接在一起并按预期填充:(使用正确的参数)

Query query = session
    .createQuery( "FROM ClassOne WHERE 
idField= :idField AND fieldTwo = :fieldTwo" );
query.setString( "idField", idField );
query.setString( "fieldTwo", fieldTwo );

我遇到的问题是我现在需要能够填充ClassOne但不知道idField的值。我知道两个类的fieldTwo的值,但我完全不知道如何将它写入Query的形式。

我看过Query by Example,却无法让它发挥作用。我知道我可以使用各个变量对每个表进行查询,并以这种方式填充对象。但是,我相信如果我只能在一个数据库中执行此操作,那么对数据库来说会更快/更容易/更少。

有人能指出我正确的方向来实现这一目标吗?我刚开始使用SQL和数据库,不知道从哪里开始查找。

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题你应该能够在你的where子句中包含第二类的字段,如下所示:

Query query = session
    .createQuery( "FROM ClassOne c1 WHERE c1.classTwo.fieldTwo = :fieldTwo" );

query.setString( "fieldTwo", fieldTwo );

答案 1 :(得分:0)

如果您从单个实体中选择,则不需要加入,因此您的代码可能就像这样  " FROM ClassOne WHERE fieldTwo =:fieldTwo"

答案 2 :(得分:0)

我觉得这个问题很混乱,但如果我理解正确,你可能希望从关系中得到ClassOne,如下所示:

假设你知道ClassTwo的id

Query query = session
.createQuery( "SELECT c1 FROM ClassOne c1 JOIN ClassTwo c2 ON c1 = c2.classOne WHERE 
c2.fieldTwo= :fieldTwo );
query.setString( "fieldTwo", fieldTwo );