【问题标题】:Java Hibernate troubleJava Hibernate 的麻烦
【发布时间】: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();
 }

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    如果Entity4的数据字段应该是唯一的,那么你应该对数据库中的对应列有一个唯一的约束。

    为了确保您不会在代码中创建重复的 Entity4 实例,您应该

    • 在数据库中搜索具有此数据字段的 Entity4 实例
    • 如果已经存在,将其添加到Entity1(或2,或3)的列表中
    • 如果不存在,则新建一个并将其添加到Entity1(或2,或3)的列表中

    请注意,如果 entity4 存在,您可能仍然有两个线程同时检查,并让这两个线程同时创建一个新线程。由于数据库中的唯一约束,这将导致其中一个线程出现异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2015-10-07
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      相关资源
      最近更新 更多