我有一个实体,它有两个相同类型的Embedded
个类,哪个类型具有相同类型2的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;
}
答案 0 :(得分:1)
你有什么理由决定使用这种结构吗?通常,在将对象转换为RDBMS时,您需要对关系建模。使用嵌入时,它会将与其关联的列(或列)添加到表中。所以当你正常地这样做(不是收藏)时,这很好。
当你进行收集时,它会遇到问题。主要是没有办法在一行中表示集合(因为这是一个实体,你可以有很多这样的实体,每个对象只有一行有效)&amp;一栏。因此,当您表示一个集合时,您实际上必须有一个第二个表,其中一列引用它回到第一个表。这与普通物体的思维方式完全相反。集合条目需要知道它们与哪些集合相关联,而不是知道其条目的集合。
所以在某些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;
}
我希望这会有所帮助。
答案 1 :(得分:0)
Google上的快速搜索在StackOverflow中显示了这一点:
似乎你必须对可嵌入类中的字段进行一些显式注释覆盖。链接答案中也有一些代码示例,可以让您了解去哪里。
干杯,