gpt4 book ai didi

java - 2 个实体可以同时拥有 2 个关系吗? (日新社)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:27 25 4
gpt4 key购买 nike

例如,我有一个包含两个构造函数的帐户实体。

@Entity
public class DefaultAccount implements Account {

@OneToOne(targetEntity = DefaultManager.class)
private Manager manager;

public DefaultAccount(String email, String password) {
this.email = email;
this.password = password;
}

public DefaultAccount(String email, String password, Manager manager) {
this(email, password);
this.manager = manager;
}
// Getters
}

第二个构造函数用于将帐户分配为经理。经理可以管理一组帐户。

@Entity
public class DefaultManager implements Manager {

@OneToOne(targetEntity = DefaultAccount.class)
private Account managerAccount;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "manager", targetEntity = DefaultAccount.class)
private Set<Account> accountsToManage = new HashSet<Account>();

public DefaultManager(Account managerAccount, Set<Account> accountsToManage) {
this.managerAccount = managerAccount;
this.accountsToManage.addAll(accountsToManage);
}
// Getters
}

上述关系是否有效?如果不是,让它发挥作用的最佳替代方案是什么?

最佳答案

是的,它会工作,你可以看到一个 SpringTest with hibernate here .

你需要一个没有参数的构造函数来使用 JPA,这个构造函数不需要是public,它可以是protected

此外,您的实体需要一个用 @Id 注释的字段。如果您的接口(interface)提供了 @Id getter 方法,您需要将注释(@OneToMany 等)放在具体类的 getter 方法中。

如果你执行测试,你会看到结果:

Hibernate: call next value for man_seq
Hibernate: insert into Test25504340$DefaultAccount (manager_id, password, email) values (?, ?, ?)
Hibernate: insert into Test25504340$DefaultAccount (manager_id, password, email) values (?, ?, ?)
Hibernate: insert into Test25504340$DefaultAccount (manager_id, password, email) values (?, ?, ?)
Hibernate: insert into Test25504340$DefaultManager (managerAccount_email, id) values (?, ?)
Hibernate: update Test25504340$DefaultAccount set manager_id=?, password=? where email=?

地点:

  1. 首先,获取插入管理器的序列(我将属性 Long id 添加到 DefaultManager)。
  2. 它将添加引用经理的三个账户(Account#manager -> Manager#id)。
  3. 插入经理
  4. 更新 Manager#Account 的引用以定位 Account 一个(Manager#manageAccount -> Account#email)。

您可以更改调用的顺序(例如,persirst 首先是管理器),结果将是具有相同最终结果的不同插入顺序。

关于java - 2 个实体可以同时拥有 2 个关系吗? (日新社),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25504340/

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