使用EntityManager在derby DB中持久化实体会产生java.sql.SQLIntegrityConstr



当我试图在Derby DB中使用Entitymanager持久化对象时,我得到了以下错误:-

 Internal Exception: java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL150318192139760' defined on 'TESTSEARCHS '.
    Error Code: 20000
    Call: INSERT INTO TESTSEARCHS (SEARCHID) VALUES (?)
        bind => [1 parameter bound]
    Query: InsertObjectQuery(example.com.TestSearchs@4e049f)

相关代码为:-

  public class TestA extends SuperA{
            @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
            protected TestSearchs testSearchs;
    ........
        }

SuperA类提供TestA 的ID

  @Entity
  @XmlTransient
  @MappedSuperclass
  @Inheritance(strategy = InheritanceType.JOINED)
  public class SuperA{
      @Id
      private String id;
    .........
    }

并且TestSearchs类是:-

public class TestSearchs {
    @Id
    @GeneratedValue
    @XmlTransient
    private long searchId;
    @ElementCollection(targetClass = String.class,fetch = FetchType.EAGER)
    protected List<String> testsearch=new ArrayList<String>();
.....
}

我通过调用TestA的setter来设置Id,它是唯一的,然后我使用entityManager.persit()持久化TestA对象,但出现了以下错误。请告诉我我做错了什么?

这有帮助吗(在TestSearchs上)?

@GeneratedValue(strategy = GenerationType.TABLE)

最新更新