Java 如何在JPA中保存或更新值为Null的OneToMany列(使用Play Framework)

Java 如何在JPA中保存或更新值为Null的OneToMany列(使用Play Framework),java,entity-framework,hibernate,jpa,playframework-2.0,Java,Entity Framework,Hibernate,Jpa,Playframework 2.0,我目前正在使用PLAY框架和JPA开发一个系统。我的问题是,如果Department_id(连接到另一个实体类)为Null或没有值,我无法保存员工 这是我的Employees实体类 @Entity public class Employees{ @Id public int employee_id; public String first_name; public String last_name; publi

我目前正在使用PLAY框架和JPA开发一个系统。我的问题是,如果Department_id(连接到另一个实体类)为Null或没有值,我无法保存员工

这是我的Employees实体类

 @Entity
 public class Employees{

        @Id
        public int employee_id;
        public String first_name;
        public String last_name;
        public String email;
        public String phone_number;
        public java.sql.Date hire_date;
        public String salary;
        public String commission_pct;

        @ManyToOne
        @JoinColumn(name="department_id",nullable = true)
        private Departments department_id;

        @ManyToOne
        @JoinColumn(name="job_id")
        private Jobs job_id;

        @ManyToOne
        @JoinColumn(name="manager_id",nullable = true)
        private Employees manager_id;
        @OneToMany(mappedBy = "manager_id")
        Set<Employees> emps = new HashSet<Employees>();
    }

你有什么例外?你如何生成你的Id?您是否手动保存所有数据?另外请注意,您的类应以单数而不是复数形式命名为Employee and Department,因为它们代表一个员工或部门。您好,我已经编辑了我的问题,显示了我的错误。我想要的是保存或更新员工,无论其是否有部门。很抱歉在部门中使用员工而不是相同的员工,我是框架新手,我不想搞乱命名实体。因为我在数据库中的表名是Employees,所以我尽量不更改程序中的实体名。不用担心。为类使用自定义名称相当容易。您只需要使用类上方的
@Table
注释。在您的例子中,您可以执行类似于
@Table(name=“employees”)
的操作,现在您的类可以有任何您喜欢的名称。如果您是JPA新手(您正在Play框架中使用JPA),您应该看看。在Java中使用camelCase而不是snake_case也是一种惯例。您会遇到什么异常?如何生成您的Id?您是否手动保存所有数据?另外请注意,您的类应以单数而不是复数形式命名为Employee and Department,因为它们代表一个员工或部门。您好,我已经编辑了我的问题,显示了我的错误。我想要的是保存或更新员工,无论其是否有部门。很抱歉在部门中使用员工而不是相同的员工,我是框架新手,我不想搞乱命名实体。因为我在数据库中的表名是Employees,所以我尽量不更改程序中的实体名。不用担心。为类使用自定义名称相当容易。您只需要使用类上方的
@Table
注释。在您的例子中,您可以执行类似于
@Table(name=“employees”)
的操作,现在您的类可以有任何您喜欢的名称。如果您是JPA新手(您正在Play框架中使用JPA),您应该看看。另外,在Java中使用camelCase而不是snake_case也是一种惯例。
@Entity
public class Departments {

    @Id
    private String department_id;
    private String department_name;
    private int manager_id;
    @OneToMany(mappedBy="department_id")
    private Set<Employees> emps = new HashSet<Employees>();
}
Caused by: org.hibernate.TransientObjectException: object references an unsaved
transient instance - save the transient instance before flushing: modelsDomain.E
mployees.department_id -> modelsDomain.Departments
        at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java
:387) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.engine.Cascade.cascade(Cascade.java:172) ~[hibernate-co
re-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(
AbstractFlushingEventListener.java:154) ~[hibernate-core-3.6.9.Final.jar:3.6.9.F
inal]
        at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFl
ushes(AbstractFlushingEventListener.java:145) ~[hibernate-core-3.6.9.Final.jar:3
.6.9.Final]
        at org.hibernate.event.def.AbstractFlushingEventListener.flushEverything
ToExecutions(AbstractFlushingEventListener.java:88) ~[hibernate-core-3.6.9.Final
.jar:3.6.9.Final]
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlus
hEventListener.java:50) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]