java - 使用主键进行 hibernate 一对一连接不起作用

标签 java hibernate join one-to-one

我在 hibernate A 和 B 中有 2 个实体。这是相关代码。

@Entity
public class A {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;

    @OneToOne(mappedBy = "a", cascade = CascadeType.ALL)
    private B b;
}

@Entity
public class B {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;

    @Column(name = "a_id")
    @GeneratedValue(generator = "gen")
    @GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "a"))
    private Integer aId;

    @OneToOne(fetch = FetchType.LAZY, optional = false)
    @PrimaryKeyJoinColumn
    private A a;
}

我做了与下面提到的链接中提到的相同的操作 one to one mapping using primary key join column

但是,当我执行以下 hql 查询时,

"from A a left join a.b"

在以下条件下进行连接

a.id = b.id 

虽然我想要的是以下条件

a.id = b.aId

最佳答案

您必须使用@JoinColumn(name = "a_id") 而不是@PrimaryKeyJoinColumn。 顺便说一句,您不能在同一列上定义两个字段。但是,如果您需要这样做,则必须使其中之一不可插入且不可更新,如下所示:

@JoinColumn(name = "a_id", insertable = false, updatable = false)

关于java - 使用主键进行 hibernate 一对一连接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45590625/

相关文章:

简单的两个表连接查询的 MySQL 性能问题

mysql - SQL 加入聚合

java - 使用 rome 遍历 feed 条目

java - 我有一点(读 : EXTREMELY) broken hitwall function and I don't see what I am doing wrong

java - PostgreSQL getSequence 当前值并传递给 id

php - 连接期间避免重复

java - 使用 org.zalando.logbook 打印带有 multipart/form-data 的请求

java - Spring Integration - 在消息中添加自定义 header

java - 批量更新从更新中返回了意外的行数(Spring/Hibernate)

java - 如果在 Hibernate 中不存在,则创建一个表