hibernate主表保存从表保存不了
主表配置
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<class name="notes.po.NotesPO"
table="OA_NOTES" schema="OFFICE">
<id name="notesID" type="java.lang.String" column="NOTESID">
<generator class="assigned" />
</id>
<property name="notesTitle" type="java.lang.String" column="NOTESTITLE"
length="200" />
<set name="notesMsg" table="OA_NOTESMSG"
lazy="true" inverse="false" cascade="all">
<key column="NOTESID" />
<one-to-many class="notes.po.NotesMsgPO" />
</set>
</class>
</hibernate-mapping>
从表配置
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin
http://boss.bekk.no/boss/middlegen/ http://hibernate.sourceforge.net/
-->
<class name="notes.po.NotesMsgPO"
table="OA_NOTESMSG" schema="OFFICE">
<id name="msgID" type="java.lang.String" column="MSGID">
<generator class="assigned" />
</id>
<property name="userName" type="java.lang.String" column="USERNAME"
length="100" />
<many-to-one name="notes"
class="notes.po.NotesPO" column="NOTESID"
insert="true" update="true" />
</class>
</hibernate-mapping>
主表实体
public class NotesPO implements Serializable {
private String notesID;
private String notesTitle;
private Set notesMsg = new HashSet();
public NotesPO() {
}
public String getNotesID() {
return this.notesID;
}
public String getNotesTitle() {
return this.notesTitle;
}
public Set getNotesMsg() {
return this.notesMsg;
}
public void setNotesID(String notesID) {
this.notesID = notesID;
}
public void setNotesTitle(String notesTitle) {
this.notesTitle = notesTitle;
}
public void setNotesMsg(Set notesMsg) {
this.notesMsg = notesMsg;
}
public boolean equals(Object other) {
if (!(other instanceof NotesPO)) {
return false;
}
NotesPO castOther = (NotesPO) other;
return new EqualsBuilder().append(getNotesID(), castOther.getNotesID())
.isEquals();
}
public int hashCode() {
return new HashCodeBuilder().append(getNotesID()).toHashCode();
}
public String toString() {
return new ToStringBuilder(this).append("notesID", getNotesID())
.toString();
}
}
从表实体
public class NotesMsgPO implements Serializable {
private String msgID;
private String userName;
private NotesPO notes;
public NotesMsgPO() {
}
public String getMsgID() {
return this.msgID;
}
public String getUserName() {
return this.userName;
}
public NotesPO getNotes() {
return this.notes;
}
public void setMsgID(String msgID) {
this.msgID = msgID;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setNotes(NotesPO notes) {
this.notes = notes;
}
public boolean equals(Object other) {
if (!(other instanceof NotesMsgPO)) {
return false;
}
NotesMsgPO castOther = (NotesMsgPO) other;
return new EqualsBuilder()
.append(this.getMsgID(), castOther.getMsgID()).isEquals();
}
public int hashCode() {
return new HashCodeBuilder().append(this.getMsgID()).toHashCode();
}
public String toString() {
return new ToStringBuilder(this).append("notesMsgID", this.getMsgID())
.toString();
}
}
主从表保存
//主表
NotesPO notesPO = new NotesPO();
notesPO.setNotesID(UUID.randomUUID().toString());
notesPO.setNotesTitle(notesTitle);
//从表
for (int i = 0; i < arrUserID.length; i++) {
NotesMsgPO noteMsgPO = new NotesMsgPO();
noteMsgPO.setMsgID(UUID.randomUUID().toString());
noteMsgPO.setUserName(arrUserName[i]);
noteMsgPO.setNotes(notesPO);
notesPO.getNotesMsg().add(noteMsgPO);
}
//保存
session.save(notesPO);
保存时hibernate显示SQL,insert了主表,但从表本来也应该是insert却显示update,因为从表没有这条数据所以update失败
Could not synchronize database state with session
因为某种原因,我需要给主表和从表的ID赋值所以设成
<generator class="assigned" />
初用hibernate,请教大家一下原因