0

我有一个 Hibernate、spring 和 GWT 应用程序。我有两个表:员工和用户。

每个用户都是员工,因此我在数据库中有一对一的关系(它们由主键连接),因此用户扩展了员工。当我首先插入用户时一切正常,它会自动正确插入父母。但是,问题是当我尝试为现有员工添加用户条目时,它不是插入带有父 ID 的用户记录,而是重新创建员工记录和用户记录。

 @javax.persistence.Entity
 @javax.persistence.Table(name = "User")
 @Inheritance(strategy = InheritanceType.JOINED)
 @PrimaryKeyJoinColumn(name="Id")
 public class User extends Employee
 { .... }

 @Reflectable(assignableClasses = true, superClasses = true)
 @javax.persistence.Entity
 @javax.persistence.Table(name = "Employee")
 @Inheritance(strategy = InheritanceType.JOINED)
 @PrimaryKeyJoinColumn(name="Id")
 public class Employee
 { 
      @Id
      @GeneratedValue
      @Column(name="Id")
      public Integer getId()
      {
        return id;
      }
 }

这是做事的正确方法吗?我该如何克服呢?

非常感谢。


更新1:

通过添加用户,我的意思是我想创建一个与员工具有相同 ID 的用户。基本上应该变成:

    Insert into User (Id, username,..) Values (1, "Username", ...)
4

2 回答 2

2

我认为现有的映射没有任何意义。

我建议取消继承并映射 Employee 和 UserAccount 之间的一对一(或一对多)关系。

我认为这更好地反映了您的模型。

员工可能是也可能不是系统的用户。在该系统上拥有用户帐户的员工。

如果将来要添加更多系统,请使用一对多。员工在零个、一个或多个系统上拥有用户帐户。

于 2012-07-14T18:11:21.603 回答
0

我第一次阅读您的描述并通过您的代码片段确认时,有些东西不正确。

你提到的一些事情我分为几点:

  • 每个用户都是员工
  • 我有 OneToOne 关系
  • 用户扩展员工
  • 当我尝试为现有员工添加用户条目时

只是没有意义。

每个用户都是员工,并且User extends Employee(在某种程度上)是有道理的,但是您为什么要提到一对一的关系呢?这里没有关系,您的代码也显示了这一点。

AUserEmployee,但 User 不拥有 Employee 也不拥有 User 属性(这就是“关系”的意思)。

关系例如:员工有地址,或者用户有权限列表。

最后一点,当您说“为现有员工添加用户条目”时,表明User在这种情况下 a 应该是 an 的属性,Employee并且可能是 aList而不是一对一的(因为您想“添加”给它)。

虽然如果你退后一步,它也没有多大意义,因为Employee它不拥有User英语意义上的 a。

一个子类/超类通常是描述一个更抽象类型的特定类型。例如。Dog是 an 的子类,Animal因为 Dog 是 Animal 的一种特定类型。我不认为你在这里想要什么。

我认为您需要重新考虑您的设计,并可能描述您正在尝试做的事情。

于 2012-07-13T20:06:28.070 回答