【问题标题】:Create and populate child table from Parent table using Hibernate Annotation使用 Hibernate Annotation 从父表创建和填充子表
【发布时间】:2012-06-02 20:02:32
【问题描述】:

我需要从表 EMPLOYEE 创建一个表 EMPLOYEE_REMARK。 并且需要使用 Annotation Hibernate 来完成。

员工

EMP_ID、EMP_FNAME、EMP_LNAME

EMPLOYEE_REMARK

EMP_REMARK_ID、EMP_ID、REMARK

这将是一个 OnetoOne 关系,即对于每个 EMP_ID 将有一个 REMARK。 REMARK 可以为空。

请帮我解决... 可以通过从员工创建一个类并从中填充 EMPLOYEE_REMARK 来完成吗???

【问题讨论】:

标签: java hibernate one-to-one


【解决方案1】:

基本上这里是做你想做的事的方式。

员工

@Entity
@Table(name = "EMPLOYEE")
public class Employee implements Serializable {

    @Id
    @Column(name = "EMP_ID")
    private Long id;
    @Column(name = "EMP_FNAME")
    private String firstName;
    @Column(name = "EMP_LNAME")
    private String lastName;
    @OneToOne(mappedBy = "employee", cascade = CascadeType.ALL,
    orphanRemoval = true)
    private EmployeeRemark employeeRemark;

    public void setRemark(String remark) {
        this.employeeRemark = new EmployeeRemark();
        this.employeeRemark.setRemark(remark);
        this.employeeRemark.setEmployee(this);
    }

    public String getRemark() {
        return employeeRemark == null ? null : employeeRemark.getRemark();
    }

    //getters and setters
}

员工备注

@Entity
@Table(name = "EMPLOYEE_REMARK")
public class EmployeeRemark implements Serializable {

    @Id
    @Column(name = "EMP_REMARK_ID")
    private Long id;
    @OneToOne
    @JoinColumn(name = "EMP_ID")
    private Employee employee;
    @Column(name = "REMARK")
    private String remark;

    //getters and setters
}

保存员工时,只需调用员工的保存即可。 EmployeeRemark 将级联到所有操作,并将与员工一起被删除,或者如果它以其他方式成为孤儿。

【讨论】:

  • 如果我没记错的话,修改现有员工的备注会导致异常。 EmployeeRemark 实体必须以某种方式持久化。
  • 嗯,我想过,但不确定。也许修改当前的 Remark 会是一个更好的解决方案?
  • 即使这样还不够,除非在创建员工后立即系统地创建备注(即 Employee 的构造函数应初始化其备注)。
  • 感谢您的回复...但问题是employeeRemark 的类型必须保留在架构中指定的字符串。我可以将employeeRemark 保留为String 类型吗?
猜你喜欢
  • 2014-04-15
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多