Hibernate 查询:从联接表中获取 Class 的数据

Hibernate Query: Get data for Class from joined tables

我有 2 个 类 休眠设置: (为清楚起见,在下面进行了简化)

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个table连在一起,共享'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 by Example,但没能成功。我知道我可以使用各个变量对每个 table 进行查询并以这种方式填充对象。但是,我相信如果我能在一个数据库中做到这一点,那么数据库的工作会更快/更容易/更少。

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

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

我觉得这个问题很混乱,但如果我理解正确,您可能希望从关系中获取 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 );

如果我正确理解你的问题,你应该能够在你的 where 子句中包含来自 class 两个字段,如下所示:

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

query.setString( "fieldTwo", fieldTwo );