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-aUserData和PermUserhas-a UserData。您也可以使用TempUserhas-a PermUser,尽管这不太清楚。如果您的应用程序需要互换使用它们(您可以通过所使用的继承获得一些东西),那么这两个类都可以实现一个返回(UserData或在第二个选项中,getPermUser返回PermUser自身)的接口。
如果您确实想使用继承,最简单的方法可能是使用“每个类层次结构的表”来映射它,然后使用直接 JDBC 直接更新鉴别器列。
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |