【发布时间】:2013-10-09 13:11:02
【问题描述】:
如果没有时间请看示例
我有两种用户,临时用户和永久用户。
临时用户以访客身份使用系统,只需提供他们的姓名并使用它,但系统需要跟踪他们。
永久用户是已注册的永久用户。
一旦用户为自己创建了永久记录,我需要将用户作为访客时跟踪的所有信息复制到他的永久记录中。
类如下,
@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;
....
}
问题是:
如果我克隆 tempUser 对象,我也会复制 id 参数,因此当保存 perm 用户对象时,它会显示一条消息,如“重复条目 '10' for key ...”,我无法先删除 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)
*请注意,我需要找到解决方案,我不在乎是否尝试新的解决方案而不是克隆对象。
我有两个不同的类的原因是tempUser 的附加属性很少,我可能还需要将几个tempUsers 的收藏夹添加到一个permUser 的收藏夹列表中。并且如上所述,用户可能有许多不同的不相关的临时记录
【问题讨论】:
-
我想我不明白这个问题,尤其是“删除一个类的记录”或“保留其相关记录”是什么意思。否则我会说,因为它在 Java 中很典型,你总是可以只使用超类 Car 而永远不知道任何四轮驱动。不知何故,这听起来太容易了。和冬眠有什么关系?
-
@Trilarion 问题已更新。谢谢
-
我从来不明白这些问题。 17.5 年的 Java 和我从来没有克隆过一个对象,除了实验。
-
@EJP 那么你如何实现这样的要求呢?
-
@J888 perm 用户是否包含临时用户拥有的所有字段/属性?
标签: java hibernate jakarta-ee hibernate-mapping