[英]jpa - Multiple @ElementCollection in two different @Embeddable classes
我有一个具有两个相同类型的Embedded
类的实体,其中一个具有两个相同类型的ElementCollection
。 业务逻辑显然是正确的,但是我猜我遇到了一些JPA知识不足的问题。
让我们检查一下我的课程:
@Entity
public class Etapa extends EntidadeBase {
@Embedded
private CronogramaDeDesembolso cronogramaDeReceita;
@Embedded
private CronogramaDeDesembolso cronogramaDeDespesa;
}
@Embeddable
public class CronogramaDeDesembolso {
@ElementCollection
private List<Parcela> parcelas;
}
我收到以下错误日志。
原因:org.hibernate.HibernateException:找到对集合的共享引用:nexxus.convenioestadual.dominio.planodetrabalho.etapa.Etapa.cronogramaDeReceita.parcelas
你们对哪里出问题有任何线索,我该如何解决?
编辑:
适当的评论,我做了这个编辑,但也没有用
@Entity
public class Etapa extends EntidadeBase {
@Embedded
@AttributeOverride(name = "parcelas", column = @Column(name = "parcelasReceita"))
private CronogramaDeDesembolso cronogramaDeReceita;
@Embedded
@AttributeOverride(name = "parcelas", column = @Column(name = "parcelasDespesa"))
private CronogramaDeDesembolso cronogramaDeDespesa;
}
您是否有任何理由决定使用此结构? 通常,将对象转换为RDBMS时,需要对关系进行建模。 当您使用可嵌入对象时,它将与之关联的一个或多个列添加到表中。 因此,当您正常执行此操作(而不是收集操作)时,就可以了。
当您进行收集时,会遇到问题。 主要是没有办法在单行中表示一个集合(因为这是一个实体,因此对于每个对象只有一行,您可能会非常有效地拥有很多)和一列。 因此,当您表示一个集合时,您实际上必须有第二个表,该表的列将其引用回到第一个表。 与正常对象的想法实际上是相反的。 集合条目需要知道它们与哪个集合相关联,而不是知道该集合的条目。
因此,在某些POJO中,您可能会拥有这些...。
MyListObject {
//Some implementation of things you want to collect
}
MyClass {
List<MyListObject> myListObject;
}
但是要在JPA中对此建模,则需要用两个表来表示。
您的对象将在列表中。
@Entity
MyListObject {
@ManyToOne
@JoinColumn(name = "MY_CLASS_KEY")
private MyClass myClass;
}
您的对象/实体将具有列表。
@Entity
MyClass {
@Id
@Column(name = "MY_CLASS_KEY")
private Long myClassKey;
@OneToMany(mappedBy = "myClass")
private List<MyListObject> myString;
}
我希望这有帮助。
在Google上进行的快速搜索在StackOverflow中启用了此功能:
似乎您必须对可嵌入类中的字段进行一些显式注释覆盖。 链接的答案中也有一些代码示例,这些代码示例应该使您对去向有一个很好的了解。
干杯,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.