我正在使用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**********
}
答案 0 :(得分:0)
您的理解是错误的,您有责任维护您修改的实体的内存状态。 Hibernate不会自动将新对象添加到另一端的内存中实体。