我正在尝试使用Spring JPA构建应用程序级视图。我也在使用lombok。
现有客户端已使用此Web服务,此时无法更改。 我们有一个新的客户端需要相同的数据,现在甚至更多。所以我认为这可以 可以说是应用程序级别的视图。
问题的基本范围是我有3个实体:A,B和C.
A和C是指向同一个表的实体。 C具有比A更多的属性 C和A都引用了B。
@Entity
@Getter
@Setter
@Table(name="Foo", schema="dbz")
public class A {
@Id
@Column(name="FOO_I")
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToMany(fetch =FetchType.EAGER, cascade= CascadeType.ALL)
@JoinColumn(name="FOO_I",nullable=false)
private Set<B> items = new HashSet<B>();
@Column(name="X")
private String x;
}
@Entity
@Getter
@Setter
@Table(name="Bar", schema="dbz")
public class B {
@Id
@Column(name="BAR_I")
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name="Y")
private String y;
@Column(name="Z")
private int z;
}
@Entity
@Getter
@Setter
@Table(name="Foo", schema="dbz")
public class C {
@Id
@Column(name="FOO_I")
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToMany(fetch =FetchType.EAGER, cascade= CascadeType.ALL)
@JoinColumn(name="FOO_I",nullable=false)
private Set<B> items = new HashSet<B>();
@Column(name="X")
private String x;
@Column(name="MoreData")
private String moreData;
//And much more other data...
}
当我在C类上注释@Entity和@Table并重建时,我的验证测试中没有异常。
当我在C类上留下@Entity和@Table注释时,我得到以下异常:
引起:org.hibernate.MappingException:com.acme.Bar中找到_items_FOO_IBackref的重复属性映射
如果我将项重命名为C中的栏,则会出现以下异常:
引起:org.hibernate.MappingException:实体映射中的重复列:com.acme.Bar列:FOO_I(应使用insert =“false”update =“false”映射)
有没有办法让hibernate接受由同一个表支持的2个与其他实体相关的java类?我不确定我是否遗漏了这里的内容,或者这是否是一个框架限制。
答案 0 :(得分:1)
您正在使用组件映射,因此请在 A 类中使用 @Embedded 注释,而不要在此处使用@ Entity,@ Id和@Table注释是一个有用的链接;