两个类如下:::
public class Person {
private String id;
private String name;
private String email;
//对应的get/set方法
}
public class Author {
private String id;
private String alias;
private Person person;
//对应的get/set方法
}
person.hbm.xml如下
<hibernate-mapping>
<class name="com.hibernate.Person" table="person">
<id name="id" type="string">
<generator class="uuid.hex"/>
</id> <property name="name"/>
<property name="email"/>
</class>
</hibernate-mapping>author.hbm.xml如下:
<hibernate-mapping>
<class name="com.hibernate.Author" table="author">
<id name="id" column="id">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="alias" type="string"/>
<one-to-one name="person" class="com.hibernate.Person" cascade="all" constrained="true"/>
</class>
</hibernate-mapping>测试如下::
Person p = new Person();
Author a = new Author(); p.setName("cncomp");
p.setEmail("[email protected]");
a.setAlias("pomfret");
a.setPerson(p); Session s = sf.openSession();
Transaction tx = s.beginTransaction(); s.save(a); tx.commit();
s.close();
sf.close();
可总是出现如下错误::
org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: person
org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:38)
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:85)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:445)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:440)
com.hibernate.TestHibernate.doGet(TestHibernate.java:26)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)请问该如何解决呀.多谢了.
我都找了好几个小时了.帮帮忙了兄弟们.
如果改成双向关连,该如何修改.
public class Person {
private String id;
private String name;
private String email;
//对应的get/set方法
}
public class Author {
private String id;
private String alias;
private Person person;
//对应的get/set方法
}
person.hbm.xml如下
<hibernate-mapping>
<class name="com.hibernate.Person" table="person">
<id name="id" type="string">
<generator class="uuid.hex"/>
</id> <property name="name"/>
<property name="email"/>
</class>
</hibernate-mapping>author.hbm.xml如下:
<hibernate-mapping>
<class name="com.hibernate.Author" table="author">
<id name="id" column="id">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="alias" type="string"/>
<one-to-one name="person" class="com.hibernate.Person" cascade="all" constrained="true"/>
</class>
</hibernate-mapping>测试如下::
Person p = new Person();
Author a = new Author(); p.setName("cncomp");
p.setEmail("[email protected]");
a.setAlias("pomfret");
a.setPerson(p); Session s = sf.openSession();
Transaction tx = s.beginTransaction(); s.save(a); tx.commit();
s.close();
sf.close();
可总是出现如下错误::
org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: person
org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:38)
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:85)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:445)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:440)
com.hibernate.TestHibernate.doGet(TestHibernate.java:26)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)请问该如何解决呀.多谢了.
我都找了好几个小时了.帮帮忙了兄弟们.
如果改成双向关连,该如何修改.
解决方案 »
- java程序如何运行
- alt 切换 到 菜单栏的问题
- 【面试题】每个人都可以回答,但太不好回答
- 怎么样才能往TimerTask类里面传送变量值呢,附部分程序供各位高手品鉴
- 关于tools.jar,dt.jar
- FileFilter Filenamefilter
- 为什么Servlet要url-pattern映射,而jsp不要
- Linux下怎样用java访问windows的共享文件?
- 请问怎样才能让父类中的某个函数在子类中必须被重载?
- 我下载的oracle的jdbc驱动,解压缩后包含两个子目录javax和oracle,并没有包含任何*.jar,我下载的对不对?如果对的话,
- 一个多线程的问题,请问如何解决?
- 110急救
person表:
create table person(id varchar(20) primary key not null, name varchar(20), email varchar(20));author表:
create table person(id varchar(20) primary key not null, alias varchar(20));
表明主控表的主键上存在一个外键
(foreign key)对其进行约束。这个选
项关系到save、delete等方法的级联操
作顺序。
你没有设外键,把constrained改成"false" 试试