我想在不使用連接表的情況下實現一對多關係並面臨奇怪的錯誤。任何人都可以幫忙嗎?線程「主」中的異常org.hibernate.PropertyValueException:非空屬性引用空值或瞬態值
User.Java
import java.util.Set;
public class User {
private int id;
private Set<Address> addresses;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Set<Address> getAddresses() {
return addresses;
}
public void setAddresses(Set<Address> addresses2) {
this.addresses = addresses;
}
}
Address.java
User.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="User"
table="USER">
<id name="id" column="user_id">
<generator class="native">
<param name="sequence">HIBERNATE_SEQUENCE
</param>
</generator>
</id>
<set name="addresses" inverse="true">
<key column="address_id"/>
<one-to-many class="Address"/>
</set>
</class>
</hibernate-mapping>
** Address.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Address"
table="Address">
<id name="id" column="address_id">
<generator class="native">
<param name="sequence">HIBERNATE_SEQUENCE
</param>
</generator>
</id>
<many-to-one name="user"
column="user_id"
not-null="true"/>
</class>
</hibernate-mapping>
Tester類
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
User user = new User();
Address address1 = new Address();
Address address2 = new Address();
Address address3 = new Address();
Address address4 = new Address();
Set<Address> addresses = new HashSet<Address>();
addresses.add(address1);addresses.add(address2);addresses.add(address3); addresses.add(address4);
user.setAddresses(addresses);
SessionFactory factory = (new Configuration()).configure().buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
session.save(user);
session.save(address1);
session.save(address2);
session.save(address3);
session.save(address4);
session.getTransaction().commit();
session.close();
}
}
錯誤staccktrace
Apr 3, 2014 6:50:59 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
Hibernate: select HIBERNATE_SEQUENCE.nextval from dual
Hibernate: select HIBERNATE_SEQUENCE.nextval from dual
Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value : Address.user
at org.hibernate.engine.internal.Nullability.checkNullability(Nullability.java:106)
at org.hibernate.action.internal.AbstractEntityInsertAction.nullifyTransientReferencesIfNotAlready(AbstractEntityInsertAction.java:132)
at org.hibernate.action.internal.AbstractEntityInsertAction.makeEntityManaged(AbstractEntityInsertAction.java:141)
at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:199)
at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:177)
at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:164)
at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:332)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:137)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
at HibernateTest.main(HibernateTest.java:38)
從論壇,我讀的問題將在用戶解決在使用逆= 「真」 .xml,但這是解決問題。
任何人都可以幫忙嗎?
請縮進您的代碼以使其更易於閱讀。 – Naili