Hibernate 按备用键休眠OneToOne

Hibernate 按备用键休眠OneToOne,hibernate,Hibernate,通过非主键,我有两个表处于一对一的关系中。我正试图映射如下实体: @Entity public class FirstEntity implements Serializable { @Id private Long id; private String code; @OneToOne(mappedBy = "firstEntity") private SecondEntity secondEntity; } @Entity public cla

通过非主键,我有两个表处于一对一的关系中。我正试图映射如下实体:

@Entity
public class FirstEntity implements Serializable {

    @Id
    private Long id;

    private String code;

    @OneToOne(mappedBy = "firstEntity")
    private SecondEntity secondEntity;

}

@Entity
public class SecondEntity {

    @Id
    private Long id;

    @OneToOne
    @JoinColumn(name = "first_entity_code", referencedColumnName = "code")
    private FirstEntity firstEntity;

    private String value;
}
@ManyToOne
@JoinColumn(name = "first_entity_code", referencedColumnName = "code")
private FirstEntity firstEntity;

@OneToMany(mappedBy = "firstEntity")
private List<SecondEntity> secondEntity;
但当我尝试选择第一个实体时,hibernate会生成以下SQL:

select
        firstentit0_.id as id1_0_1_,
        firstentit0_.code as code2_0_1_,
        secondenti1_.id as id1_1_0_,
        secondenti1_.first_entity_code as first_en3_1_0_,
        secondenti1_.value as value2_1_0_ 
    from
        FirstEntity firstentit0_ 
    left outer join
        SecondEntity secondenti1_ 
            on firstentit0_.id=secondenti1_.first_entity_code 
    where
        firstentit0_.code=?
当我将映射从@OneToOne更改为@ManyToOne和@OneToMany时,如下所示:

@Entity
public class FirstEntity implements Serializable {

    @Id
    private Long id;

    private String code;

    @OneToOne(mappedBy = "firstEntity")
    private SecondEntity secondEntity;

}

@Entity
public class SecondEntity {

    @Id
    private Long id;

    @OneToOne
    @JoinColumn(name = "first_entity_code", referencedColumnName = "code")
    private FirstEntity firstEntity;

    private String value;
}
@ManyToOne
@JoinColumn(name = "first_entity_code", referencedColumnName = "code")
private FirstEntity firstEntity;

@OneToMany(mappedBy = "firstEntity")
private List<SecondEntity> secondEntity;
@ManyToOne
@JoinColumn(name=“first\u entity\u code”,referencedColumnName=“code”)
私人第一实体第一实体;
@OneToMany(mappedBy=“firstEntity”)
私有实体;
一切正常。
我不明白第一个例子有什么问题。有没有办法通过非主键映射双向一对一关联

您使用的是什么hibernate版本?@SternK我使用的是5.2.15.Final版本,但我也能在5.4.0.Final上复制这个例子。看起来像本机查询:@query(value=“select F.from FirstEntity F left join SecondEntity S S on S.first_entity_code=F.code和F.code=:code”,nativeQuery=true)FirstEntity findByCodeCustomNative(@Param(“code”)字符串代码);*不太管用。