0

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

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

旁注:我在 getter 上有注释的原因是,如果将它们直接放在全局变量上,hibernate 根本不会拾取它们。(我在从 Letter 扩展的类上没有设置主键错误)。hibernate 不处理多个相互引用的继承表吗?当我只有一个继承表时,一切都可以直接在全局变量上使用注释。

谢谢,迈克

@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**********
}
4

1 回答 1

0

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

于 2012-11-30T19:52:41.727 回答