我正在使用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**********
}