接收org.hibernate.MappingException:重复的属性映射

时间:2014-12-27 00:07:49

标签: java spring hibernate jpa

我正在尝试使用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类?我不确定我是否遗漏了这里的内容,或者这是否是一个框架限制。

1 个答案:

答案 0 :(得分:1)

您正在使用组件映射,因此请在 A 类中使用 @Embedded 注释,而不要在此处使用@ Entity,@ Id和@Table注释是一个有用的链接;

http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-component-using-annotations-1.html