繁体   English   中英

通过FK映射一对一休眠

[英]Hibernate one to one with FK mapping

我有这种情况:

Class A {

   @Id
   Integer id;

   @OneToOne
   @JoinColumn(name = "b.a_id", referencedColumnName = "id")
   B b;
}

Class B {

   @Id
   Integer id;


   Integer a_id;
}

FK在B表中。

Runnig以下查询不起作用:

SELECT A1 FROM A A1 LEFT JOIN FETCH A1.b WHERE A1.id = 6;

我没有B。

另外,如果我让休眠生成数据库,它将在A表中设置FK,但我希望在B表中设置它。 不应存在​​双向映射。

请帮助,我该怎么做?

我认为一个潜在的解决方案是将B类设置为关系的所有者。 您也可以使用其他外部表管理的关系,请参阅

@Entity
public class A {
    @Id
    private Integer id;

    @OneToOne(mappedBy = "a")
    private B b;
}

@Entity
public class B {
    @Id
    private Integer id;

    @OneToOne
    @JoinColumn(name = "a_id")
    private A a;

}

mysql> desc A;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   | PRI | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> desc B;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   | PRI | NULL    |       |
| a_id  | int(11) | YES  | MUL | NULL    |       |
+-------+---------+------+-----+---------+-------+

如果要在目标表中使用单键@OneToOne并带有外键,请尝试使用此方法

@OneToOne
@JoinColumn(name = "a_id", insertable = false, updateable = false)
B b;

insertable = false, updateable = false应该指示休眠在目标表中查找联接列。

好的,在尝试了几乎所有内容之后,我不得不妥协并决定使用双向映射。

这样就很容易修复所有问题。

我把A边的mapedBy放进去,然后将@JoinColumn放到B类的A属性上。

感谢你的帮助。

暂无
暂无

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

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