如何将不同记录的数据添加到单个记录中?

J88*_*888 8 java hibernate hibernate-mapping java-ee

如果没有时间,请看一下这个例子

我有两种类型的用户,临时用户和永久用户.

临时用户使用系统作为访客只需提供他们的名字并使用它,但系统需要跟踪它们.

永久用户是那些已注册且永久的用户.

一旦用户为自己创建永久记录,我需要将用户作为访客时被跟踪的所有信息复制到他的永久记录中.

课程如下,

@Entity
public class PermUser{
    @Id
    @GeneratedValue
    private long id;

    @OneToMany
    private List Favorites favorites;    
    ....

}

@Entity
public class Favorites {
    @Id
    @GeneratedValue
    private long id;

    @OneToMany (cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List <FavoriteItems> items;

    ...
 }

 @Entity
   public class FavoriteItems {
     @Id
     @GeneratedValue
     private long id;

     private int quantity;

     @ManyToOne
     private Ball ball;
     ..
   }


@Entity
public class TempUser extends PermUser{
    private String date;
    ....
}
Run Code Online (Sandbox Code Playgroud)

问题是:

如果我克隆tempUser对象,我也会复制id参数,所以当保存perm用户对象时,它会显示一条消息,如"密钥条目'10'为密钥...",我无法先删除tempUser然后保存permUser就像保存permUser失败一样,我将错过数据.如果我尝试单独复制每个最喜欢的球项而没有项目ID,那么这将不是一种有效的方法.

示例(一句话中的问题:如图所示,用户可能有多个TempUser记录和一个PermUser记录,因此我需要将所有TempUser记录的信息添加到该单个PermUser记录中.)

  Type of record    | name      | favorites         | date 
                    |           |                   |
1)TempUser          | Jack      | 2 items           | 1/1/2013
2)TempUser          | Jack      | 3 items           | 1/4/2013
  ---------------------------------------------------------------------------
  PermUser          | Jack      | 5 items ( 2 + 3 items from his temp records)
Run Code Online (Sandbox Code Playgroud)

*请注意,我需要找到一个解决方案,并不关心是否尝试新的解决方案而不是克隆对象.

我有两个不同的类的原因是它tempUser具有很少的附加属性,我可能还需要将少数几个tempUsers的收藏夹添加到收藏夹列表中permUser.并且如上所述,用户可以具有许多不同的不相关的临时记录

Dav*_*erg -1

对此进行建模的一个好方法是创建类似类的内容,UserData例如TempUserhas-aUserDataPermUserhas-a UserData。您也可以使用TempUserhas-a PermUser,尽管这不太清楚。如果您的应用程序需要互换使用它们(您可以通过所使用的继承获得一些东西),那么这两个类都可以实现一个返回(UserData或在第二个选项中,getPermUser返回PermUser自身)的接口。

如果您确实想使用继承,最简单的方法可能是使用“每个类层次结构的表”来映射它,然后使用直接 JDBC 直接更新鉴别器列。