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”)字符串代码);*不太管用。