Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在填充的数据库中使用@GeneratedValue(strategy=GenerationType.IDENTITY)会导致PK约束错误_Java_Jpa_Eclipselink - Fatal编程技术网

Java 在填充的数据库中使用@GeneratedValue(strategy=GenerationType.IDENTITY)会导致PK约束错误

Java 在填充的数据库中使用@GeneratedValue(strategy=GenerationType.IDENTITY)会导致PK约束错误,java,jpa,eclipselink,Java,Jpa,Eclipselink,我正在尝试将FeedbackItem项添加到我的数据库中。一般的想法是,组类型的现有对象可以接收多个反馈项对象。之后,我更新对象: groupDAO.startTransaction(); groupDAO.update(selectedGroup); groupDAO.commitTransaction(); //in groupDAO public T update(T entity){ return em.merge(entity); } 我不确定是否是JPA导致了问题,但会出现

我正在尝试将
FeedbackItem
项添加到我的数据库中。一般的想法是,
类型的现有对象可以接收多个
反馈项
对象。之后,我更新对象:

groupDAO.startTransaction();
groupDAO.update(selectedGroup);
groupDAO.commitTransaction();

//in groupDAO
public T update(T entity){
   return em.merge(entity);
}
我不确定是否是JPA导致了问题,但会出现以下错误:

内部异常:java.sql.SQLIntegrityConstraintViolationException:该语句被中止,因为它会导致在“FEEDBACKITEM”上定义的“SQL170430012202680”标识的唯一或主键约束或唯一索引中出现重复的键值

经过进一步调试后,我发现以下条目:

[EL Fine]:sql:2017-04-30 01:22:14.977-#########值(?,)绑定=> [样本文本,2]

[EL Fine]:sql:2017-04-30 01:22:14.997--客户端会话(889348271)--线程(线程[JavaFX 应用程序线程,5,主]——值(1)

VALUES(1)
是否表示它正在尝试将对象插入ID 1下?这是我目前唯一的线索。我的数据库中填充了10个条目,ID从1到10不等

下面是我试图持久化到数据库的类:

@Entity
public class FeedbackItem implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int feedbackId;

    private String feedback;

    @ManyToOne(cascade = CascadeType.PERSIST)
    private User ownerFeedback;

    protected FeedbackItem(){

    }
}
我在没有
@GeneratedValue(strategy=GenerationType.IDENTITY)
的情况下测试了我的代码,并手动分配了ID。这样做没有任何问题

编辑:下面是
实体:

@Entity
public class Group implements IReadOnlyGroup {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int groupId;
    private String name;

    @OneToMany(mappedBy = "group")
    private List<Action> actions;

    @OneToMany(cascade = CascadeType.PERSIST)
    private List<Proposal> proposals;

    @OneToMany(mappedBy = "group")
    private List<Motivation> motivations;

    @OneToOne(mappedBy = "group")
    private GroupState currentState;

    public Groep() {
    }
}
@OneToMany(cascade=CascadeType.PERSIST)
私人名单建议;

表示提案实体与组一起保留,但不合并。在分配和持久化组实体之前,应分别持久化其他实体。我将尝试删除这个级联属性,并检查问题是否仍然存在

groupDAO.update()。我将代码添加到问题中。@Tumladhir为组实体粘贴代码。您是如何在数据库中填充这10项的,以及如何设置标识序列的?设置了什么数据库和数据库平台?在受支持的平台上使用identity时,EclipseLink不会传入ID的值,因此可能是它设置不正确,或者您传入的实体已经设置了值。日志记录应显示正在使用的完整SQL,包括为导致错误的语句传入的值列表,以便您可以检查有问题的值是如何分配的,或者您是否传入了具有此值的实体,并且没有正确地对其调用merge。项是使用
insert-into
语句插入的。我没有设置任何显式标识序列。我正在使用JDBCDerby和EclipseLink JPA2.1。日志文件中的查询(在应用程序中工作时尝试保留新对象)如下:
插入FEEDBACKITEM(FEEDBACK,OWNER\u USERID)值(?,)
,其中值由[feedbacktext,2]绑定。我认为这句话没有错。id字段应该由JPA标识填充?我添加了集团实体和提案实体的代码。该组还包含使用相同类型反馈项的其他对象,这些对象在过程中没有更改。这会导致冲突吗?@Tumladhir-answer-replacedYou关于级联类型的看法确实正确。我把它拿走了。但是,它仍然显示相同的错误。我尝试创建一个提案并手动持久化它,在反馈项上使用级联持久化(因为创建提案时它也是一个新对象)。它仍然在坚持这一点FeedbackItem@Tumladhir,反馈项也是新的还是现有的?若存在,则无法在其上级联持久化。@Tumladhir DB表应生成下一个id。请尝试插入(使用本机SQL)id为空的记录,以检查表是否正确生成下一个id。如果不是,我想主键的设置是错误的。
Entity
public class Proposal {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Temporal(TemporalType.TIMESTAMP)
    private Date date = null;

    @ManyToMany
    private List<Action> actions;

    @OneToOne
    private FeedbackItem feedbackitem;

    boolean approved;

    protected Proposal() {

    }

    public Proposal ( List<Action> actions, String feedback, boolean approved, User owner){
        this.date = new Date();
        this.actions = actions;
        this.approved = approved;
        this.feedbackitem = new FeedBackItem(feedback, owner);
    }
}
@OneToMany(cascade = CascadeType.PERSIST) 
private List<Proposal> proposals;