【发布时间】:2012-06-23 01:35:53
【问题描述】:
我有这个映射:
实体 1 实体 2 实体 3
还有实体 4
实体编号 1,2 和 3 具有实体 4 的列表。 实体 4 只有 2 个字段:一个字符串(数据)和一个我设置为 @Id 和 @GeneratedValue 的 Id
在包含实体 4 数据的数据库表中,我不希望 String(DATA) 重复。
但实体 1,2 和 3 可以在它们的实体 4 列表中包含它们之间的重复数据。
一个例子(实例是指定实体的对象):
Instance 1 (Entity 1): List: ["hi","hello","music"]
Instance 2 (Entity 2): List: ["tv","hi","sofa"]
Instance 3 (Entity 2): List: ["sofa","wii"]
Instance 4 (Entity 3): List: ["music","otherString"];
实体 4 的 db 表条目应该是:
标识字符串
1 喜
2 你好
3 音乐
4 电视
5 沙发
6 wii
7 其他字符串
我得到的是:
标识字符串
1 喜
2 你好
3 音乐
4 电视
5 嗨
6沙发
7沙发
8 wii
9 音乐
10个其他字符串
数据重复。当我尝试使用 @Id 注释提供字段字符串时,当我尝试保存实体 1,2 或 3 的实例及其列表中已经存在的字符串时,它会发送实体 4 的重复条目错误并执行不保存实体 1,2 或 3。
如何正确注释?
我的一些代码:
实体 1,2 或 3(在这部分代码中它们都是相同的):
@Entity
public class Entity1 {
private List<Entity4> entity4List;
@OneToMany(targetEntity=Entity4.class,cascade =CascadeType.ALL)
public List<Entity4> getEntity4List() {
return entity4List;
}
}
实体 4:
@Entity
public class Entity4 {
private long id;
private String stringn;
@Id
@GeneratedValue
public long getId() {
return id;
}
}
还有我保存实体 1,2 或 3 的休眠代码:
public void addEntity1(ArrayList<String> list){
List<Entity4> L = new ArrayList<Entity4>();
for(String s:list)
{
L.add(new Entity4(s));
}
Entity1 e=new Entity1(L);
Session session = sf.getCurrentSession();
session.beginTransaction();
session.save(e);
session.getTransaction().commit();
}
【问题讨论】: