gpt4 book ai didi

hibernate : attempted to assign id from null one-to-one property: employee

转载 作者:行者123 更新时间:2023-12-03 09:04:25 32 4
gpt4 key购买 nike

这是我的数据库结构,MySQL 中的一对一映射:

DB Schema

这是我的java文件:

public class Employee {

private EmployeeDetail empdetail;
private String firstname;
private String lastname;

// getters and setters

}


public class EmployeeDetail {
private Employee employee ;
private int employee_id;
private String street;
private String city;
private String state;
private String country;

// getters and setters

}

这是我的映射文件:
<hibernate-mapping>

<class name="Employee" table="employee">
<id name="employee_id" type="java.lang.Integer" column="employee_id">
<generator class="assigned" />
</id>
<one-to-one name="empdetail" class="EmployeeDetail"
cascade="all"></one-to-one>

<property name="firstname" type="java.lang.String" column="firstname" />
<property name="lastname" type="java.lang.String" column="lastname" />

</class>



<class name="EmployeeDetail" table="employeedetail">
<id name="employee_id" type="java.lang.Integer" column="employee_id">
<generator class="foreign">
<param name="property">employee</param>
</generator>
</id>
<one-to-one name="employee" class="Employee"
cascade="save-update"></one-to-one>

<property name="street" type="java.lang.String" column="street" />
<property name="city" type="java.lang.String" column="city" />
<property name="state" type="java.lang.String" column="state" />
<property name="country" type="java.lang.String" column="country" />

</class>

</hibernate-mapping>

这是我的客户端程序:
Session session = factory.openSession();
Transaction tx = session.beginTransaction();

EmployeeDetail edetail = new EmployeeDetail();
edetail.setCity("Hyd");
edetail.setCountry("India");
edetail.setEmployee_id(222);
edetail.setState("Andhra Pradesh");

Employee employee = new Employee();

employee.setEmployee_id(222);
employee.setFirstname("Pavan");
employee.setLastname("Jaooi");
employee.setEmpdetail(edetail);

session.merge(employee);
tx.commit();
session.close();
factory.close();

这是我得到的异常(exception):
INFO: Not binding factory to JNDI, no JNDI name configured
Hibernate: select employee0_.employee_id as employee1_0_1_, employee0_.firstname as firstname0_1_, employee0_.lastname as lastname0_1_, employeede1_.employee_id as employee1_1_0_, employeede1_.street as street1_0_, employeede1_.city as city1_0_, employeede1_.state as state1_0_, employeede1_.country as country1_0_ from employee employee0_ left outer join employeedetail employeede1_ on employee0_.employee_id=employeede1_.employee_id where employee0_.employee_id=?
Hibernate: select employeede0_.employee_id as employee1_1_0_, employeede0_.street as street1_0_, employeede0_.city as city1_0_, employeede0_.state as state1_0_, employeede0_.country as country1_0_ from employeedetail employeede0_ where employeede0_.employee_id=?
Exception in thread "main" org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: employee
at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:44)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:186)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:240)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:120)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:687)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:669)
at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:245)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:194)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:240)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:120)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665)
at CustomerClient.main(CustomerClient.java:31)

最佳答案

您告诉 Hibernate 从其 employee 的 ID 生成 EmployeeDetail ID。属性,但您从未初始化此属性。

添加 edetail.setEmployee(employee);到您的代码。

关于 hibernate : attempted to assign id from null one-to-one property: employee,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11104897/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com