gpt4 book ai didi

java - 如何使用父实体的组合键进行 JPA @OneToMany 单向映射?

转载 作者:行者123 更新时间:2023-12-02 03:45:06 25 4
gpt4 key购买 nike

目前,这些只是查询操作,如果您“获取”父级,则需要急切地获取所有子级。它是遗留数据库(DB2),其中父表中有三个字段是其复合 PK。子表具有这三个字段和一个作为其复合 PK 的字段。

无需双向。只需要让 child 和家长一起。

@Entity @IdClass(ParentId.class)
class Parent {
@Id int someId
@Id int someCode
@Id Date someDate

@OneToMany(fetch = FetchType.EAGER, ???)
???
List<Child> children
}

class ParentId implements Serializable {
int someId
int someCode
Date someDate
}

@Entity @IdClass(ChildId.class)
class Child {
@Id int someId
@Id int someCode
@Id Date someDate
@Id String childValue
...
}

class ChildId implements Serializable {
int someId
int someCode
Date someDate
String childValue
}

ChildId 类非常类似于父类加上另一个字段。

我需要切换到@Embeddable和@EmbeddableId等吗?无论如何,有人有想法如何使这项工作有效吗?我见过一些更简单的示例,但似乎对我不起作用。

我可以更改父类和子类,但不能更改表及其当前的复合 PK。

最佳答案

您可以使用@IdClass@EmbeddedId。无论哪种方式,您都在使用“派生身份”。这是使用 @IdClass 的可能解决方案:

@Entity
@IdClass(ParentId.class)
public class Parent {
@Id int someId;
@Id int someCode;
@Id Date someDate;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent")
List<Child> children;
}

public class ParentId implements Serializable {
int someId;
int someCode;
Date someDate;
...
}

@Entity
@IdClass(ChildId.class)
public class Child {
@Id
@ManyToOne
@JoinColumns({
@JoinColumn(name="PARENT_ID", referencedColumnName="someId"),
@JoinColumn(name="PARENT_CODE", referencedColumnName="someCode"),
@JoinColumn(name="PARENT_DATE", referencedColumnName="someDate")
})
Parent parent;
@Id String childValue;
...
}

public class ChildId implements Serializable {
ParentId parent; // matches name of attribute and type of Parent Id class
String childValue;
}

JPA 2.1 规范的第 2.4.1 节讨论了派生身份。

关于java - 如何使用父实体的组合键进行 JPA @OneToMany 单向映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367462/

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