繁体   English   中英

JPA-非主键字段上的@OneToOne关系不起作用

[英]JPA - @OneToOne relation on non-primary-key field not working

我有一个使用Hibernate作为ORM实现的Spring Data JPA后端。

这是模型:

 __________     _________________________
 |Person  |     |MailConfig             |
 |________|     |_______________________|
 | id PK  |     | uid PK-FK(Person.uid) |
 | uid    |     | ...                   |
 | ...    |     |                       | 
 |________|     |_______________________|

@Entity
@Table(name="Person")
public class PersonEntity{

    @Id
    private String id;

    private String uid;

    @OneToOne(mappedBy="id", fetch=FetchType.EAGER)
    private MailConfigEntity mailConfigNotes;

    ...
}

@Entity
@Table(name="MailConfig")
public class MailConfigEntity implements Serializable{

    @Id
    @OneToOne
    @JoinColumn(name="uid", table="Person", referencedColumnName="uid", insertable = false, updatable = false)
    private PersonEntity id;

    ...
}

人员表通过非人员主键的字段与MailConfig表联接。 当我使用personDAO.findOne(id)加载实体时,可以看到查询中的联接是针对person.id而不是person.uid( on personent0_.id=mailconfig2_.uid )执行的。 知道为什么这行不通吗?

查询日志:

    select
        personent0_.id as id8_2_,
        personent0_.uid as uid8_2_,
        mailconfig2_.uid as uid5_1_
    from
        Person personent0_ 
    left outer join
        mailconfig mailconfig2_ 
            on personent0_.id=mailconfig2_.uid 
    where
        personent0_.id=?

根据文档,检查这是否是外键

一对一关联的情况有以下三种:要么关联的实体共享相同的主键值,要么外键由其中一个实体持有(请注意,数据库中的此FK列应限制为唯一,以模拟一个-或一对多)或关联表用于存储2个实体之间的链接(必须在每个fk上定义唯一约束以确保一对一的多重性)。

同样,JoinColumn也应位于关系的所有者端

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM