2
在過去的4個小時裏,我一直在拼命試圖進行以下映射工作。Hibernate無法將Map集合映射到ManyToMany
@Entity
public class Foo {
@Basic
private String bar;
@Id
@Column(name = "FOO_ID")
@Type(type = "foo.bar.OracleGuidType")
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
private UUID id;
@ManyToMany(mappedBy = "parentFoos", fetch = FetchType.EAGER)
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@MapKeyColumn(name = "NESTED_FOO_KEY")
private Map<String, Foo> nestedFoos = new
HashMap<String, Foo>();
@ManyToMany
@JoinTable(
name = "FOO_RELATIONSHIP",
joinColumns = @JoinColumn(name = "NESTED_FOO_ID",
referencedColumnName = "FOO_ID"),
inverseJoinColumns = @JoinColumn(name = "PARENT_FOO_ID",
referencedColumnName = "FOO_ID")
)
private Set<Foo> parentFoos = new HashSet<Foo>();
//getters/setters
}
映射可能很複雜,但這就是要求。
的問題是,當我嘗試做以下
Foo parent = new Foo();
parent.setWhatever("parent");
Foo child = new Foo();
child.setWhatever("child");
Session currentSession = sessionFactory.getCurrentSession();
Transaction tx = currentSession.getTransaction();
tx.begin();
currentSession.saveOrUpdate(child);
tx.commit();
currentSession = sessionFactory.getCurrentSession();
tx = currentSession.getTransaction();
tx.begin();
child.getParentFoos().add(parent);
parent.getNestedFoos().put("ASDF_KEY", child);
currentSession.saveOrUpdate(parent);
tx.commit();
什麼,我得到的是這樣的:
休眠:(?)插入到富(不管,FOO_ID)值
休眠:insert into Foo(whatever,FOO_ID)values(?,?)
Hibernate:update Foo set whatever =?其中FOO_ID =?
休眠:插入FOO_RELATIONSHIP(NESTED_FOO_ID,PARENT_FOO_ID)值
似乎休眠忽略mapkeycolumn(雖然它創建一個先得用hbm2ddl)和我所得到的未來是這樣的例外
致無法將NULL插入( 「BAR」, 「FOO_RELATIONSHIP」 「NESTED_FOO_KEY」。)
我相信,這個實體可以映射。請幫我解決這個問題。
請張貼表結構。 –