gpt4 book ai didi

java - 如何在 Hibernate 中使用两个表保存自引用实体?

转载 作者:行者123 更新时间:2023-12-01 05:05:39 27 4
gpt4 key购买 nike

我在使用 Hibernate 时遇到了一个小而奇怪的问题。我有两个表:“SERVICE”和 SERVICE_RELATIONSHIP 定义两个服务之间的关系。

CREATE TABLE TMS.TB_SERVICE ( 
ID_SERVICE INTEGER NOT NULL,
NAME VARCHAR(255),
)


CREATE TABLE SERVICE_RELATIONSHIP (
ID_SERVICE INTEGER NOT NULL,
ID_SERVICE_REL INTEGER NOT NULL,
RELATIONSHIP VARCHAR(1) // Could be 'E' (Exclude) or 'I' (Include)
)

我使用不同的方法(getInclude 和 getExclude)来获取服务,具体取决于它们所具有的关系类型。它们工作完美,唯一的问题是当我想要保留服务时,ID_SERVICE 和 ID_SERVICE_REL 列被正确插入但不是 RELATIONSHIP

@Table(name="SERVICE")
public class Service implements Serializable {
private String name;
private Integer id;
private Collection<Service> exclude;
private Collection<Service> include;
[..]
@JoinTable(name = "SERVICE_RELATIONSHIP",
joinColumns = {
@JoinColumn(name="ID_SERVICE", unique = false, updatable = true)
},
inverseJoinColumns = {
@JoinColumn(name="ID_SERVICE_REL")
}
)
@WhereJoinTable(clause = "RELATIONSHIP='E'")
public Collection<Service> getExclude() {
return exclude;
}

[..]
@OneToMany(fetch=FetchType.EAGER)
@JoinTable(name = "SERVICE_RELATIONSHIP",
joinColumns = {
@JoinColumn(name="ID_SERVICE", unique = false, updatable = true)
},
inverseJoinColumns = {
@JoinColumn(name="ID_SERVICE_REL")
}
)
@WhereJoinTable(clause = "RELATIONSHIP='I'")
public Collection<Service> getInclude() {
return include;
}
}

有什么想法吗?提前致谢

最佳答案

@WhereJoinTable 顾名思义,仅用于在 select 子句上进行联接时的Where 条件。

您有多种选择来实现此目的。

  1. 将关系映射为类。
  2. 创建包含和排除表。

就我个人而言,我会映射关系类,但我会将其对外部 Service 隐藏,因此使用服务的代码不知道关系类。

关于java - 如何在 Hibernate 中使用两个表保存自引用实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12728761/

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