Hibernate继承表互相引用

时间:2012-11-30 19:36:36

标签: java hibernate hibernate-annotations

我正在使用hibernate,在我的数据模型中,我在两个不同的地方使用Hibernate.Inheritence单表,但是当它们彼此反应时会出现问题。让我试着用这个例子来简化。

基本上发生的事情是当我做letter.setWord(word)然后保存它的单词没有引用回信。根据我对mappedBy的理解,你不必在两端明确设置和保存它吗?当我查看数据库时,该字段正在使用它引用的Word的guid进行正确设置。我做错了吗?

附注:我在getter上注释的原因是因为如果将hibernate直接放在全局变量上,它们根本不会选择它们。 (我在从Letter延伸的类中没有设置主键错误)。休眠只是不处理引用彼此的多个继承表吗?当我只有一个继承表时,一切都可以直接在全局变量上使用注释。

谢谢, 麦克

@Entity
@Table(name="Letter")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name = "LETTER_TYPE",  
    discriminatorType=DiscriminatorType.STRING)
public abstract class Letter {

   private String id;

   private String value;

   private Word word;

   @Id
   @GeneratedValue(generator = "uuid")
   @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDHexGenerator")
   @Access(AccessType.PROPERTY)
   public String getId() {
       return id;
   }

   @Column(name = "VALUE")
   @Access(AccessType.PROPERTY)
   public String getValue() {
         return value;
   }

   @ManyToOne
   @JoinColumn(name = "WORD_ID")
   @Access(AccessType.PROPERTY)
   public Word getWord() {
        return word;
   }

          ********BASIC SETTERS WITH NO ANNOTATIONS********
}

 @Entity
@Table(name="Word")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name = "WORD_TYPE",  
    discriminatorType=DiscriminatorType.STRING)
public abstract class Word {

   private String value;

   private List<Letter> letters;

   private String id;

   @Id
   @GeneratedValue(generator = "uuid")
   @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDHexGenerator")
   @Access(AccessType.PROPERTY)
   public String getId() {
       return id;
   }

   @Column(name = "VALUE")
   @Access(AccessType.PROPERTY)
   public String getValue() {
         return value;
   }

  @OneToMany(mappedBy="word")
  @Cascade({CascadeType.ALL})
  @Access(AccessType.PROPERTY)
   public List<Letter> getLetters() {
        return letters;
   }

        ***************BASIC SETTERS WITH NO ANNOTATIONS**********
}

1 个答案:

答案 0 :(得分:0)

您的理解是错误的,您有责任维护您修改的实体的内存状态。 Hibernate不会自动将新对象添加到另一端的内存中实体。