gpt4 book ai didi

java - Hibernate一对一关系似乎仅在使用注释时才需要双向性

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:29 25 4
gpt4 key购买 nike

过去几天我一直在学习 hibernate 并有一些一般性问题。我开始学习如何使用 xml 映射来映射项目中的关系;现在我试图回顾我的项目,看看是否可以实现注释。我似乎一直遇到同样的问题,为了正确映射聚合关系,我必须在我聚合的类中创建我聚合的类的实例,哈哈,这看起来很奇怪……你聚合的类的实例,聚合到你聚合到的类中......这就像一个无限循环吗?就像昨天一样,我试图用注释构建这个 xml 映射。

类(class)用户...

private int userId--
private string username--
private string password--
Private Person person--

类(class)人...

private int personId;--
private String firstName;--
private String lastName;--
private String email;--

映射

<hibernate-mapping package="my.bank.BLL.objects">
<class name="User" table="USER" dynamic-update="true">
<id name="userId" type="int" column="USER_ID">
<generator class="native"/>
</id>
<property name="username" type="string">
<column name="USERNAME" length="45" not-null="true" />
</property>
<property name="password" type="string">
<column name="PASSWORD" length="45" not-null="true"/>
</property>
<one-to-one name="person" class="my.bank.BLL.objects.Person"
cascade="save-update" lazy="false">
</one-to-one>
</class>

这工作得很好,我不需要在我的个人 xml 映射中引用任何特殊的东西,只需映射列即可。嗯..我确实必须确保 personId 与 UserID 匹配,但这并不难。

昨天,我简直不敢相信,为了获得注释来完成同样的事情,我付出了多少努力……

@Entity
@Table(name = "user")
public class User implements Serializable {

@Id
@GeneratedValue
@Column(name = "USER_ID")
private int userId;

@Column(name = "USERNAME", nullable = false, length = 45)
private String username;

@Column(name = "PASSWORD", nullable = false, length = 45)
private String password;

@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private Person person;

还有 person 类...

@Entity
@Table(name = "person")
public class Person implements Serializable {

@Id
@GeneratedValue
@Column(name = "PERSON_ID")
private int personId;

@Column(name = "FIRST_NAME", nullable = false, length = 45)
private String firstName;

@Column(name = "LAST_NAME", nullable = false, length = 45)
private String lastName;

@Column(name = "EMAIL", nullable = false, length = 45)
private String email;

@OneToOne
@PrimaryKeyJoinColumn
private User user; <------------------------------

使用注释是当我必须开始在我聚合的对象内引用我的聚合对象时,这让我感到困惑。

最佳答案

我不确定,但我怀疑问题是您的 USER_ID 外键列位于 PERSON 表中。这意味着您需要在人员方面进行注释(因此需要一个 user 字段)才能配置人员-用户关系。如果您在 USER 表中有一个 PERSON_ID 列,那么我认为您可以在 User 类中执行此操作:

@JoinColumn(name = "PERSON_ID")
@OneToOne(cascade = CascadeType.ALL)
private Person person;

同样,我必须设置所有这些才能看看情况是否如此,但这是值得尝试的事情。

关于java - Hibernate一对一关系似乎仅在使用注释时才需要双向性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com