用于显示和CRUD操作的实体类

时间:2013-02-23 09:54:38

标签: java spring hibernate jpa jpa-2.0

我正在使用Hibernate 4.1.0和JPA 2.0

我有一个类似于以下的实体类

@Entity
@Table(name = "V_EMPLOYEES")
public class Employee {

        @Id
        @Column(name = "EMPLOYEENUMBER")
        private String employeeNumber;

        @Column(name = "EMPLOYEENAME")
        private String employeeName;

        @Column(name = "DEPARTMENT")
        private String dept;

/ *以上* /

的getter和setter

... ..

@Table(name = "V_EMPLOYEES")此处V_EMPLOYEESview,我使用此employeename从我的查找表中获取并加入employeeno

我使用上面的方法在datatable中显示值,并且工作正常。

当用户单击“添加”按钮和弹出对话框时,我想创建一个新的员工记录 用户输入employeenumberemployeestatusemployeedepartment等等。

当我在我的view类中使用Entity时,如果我想创建一个新的员工记录,我应该创建一个可以更新的数据库view还是创建一个新的Entity类对Employee表的引用?如果我的列不是数据表的一部分用于查看目的,我想用于创建或更新记录,该怎么办?

最佳方法和最佳做法是什么?

我使用EntityManager进行数据提取和持久化(插入,更新和删除)

任何帮助都是非常明确的

1 个答案:

答案 0 :(得分:1)

鉴于这些要求,我会维护两个独立的实体,将公共字段推送到映射的超类中:

@MappedSuperclass
public abstract class AbstractEmployee {
    @Id
    @Column(name = "EMPLOYEENUMBER")
    private String employeeNumber;

    @Column(name = "EMPLOYEENAME")
    private String employeeName;

    @Column(name = "DEPARTMENT")
    private String dept;

    // Constructor, getters, setters
}

@Entity
@Table(name = "V_EMPLOYEES")
public class ReadOnlyEmployee extends AbstractEmployee {
}

@Entity
@Table(name = "EMPLOYEES")
public class Employee extends AbstractEmployee {
    // Extra mappings here
}