Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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 在具有组合键的相关实体之间插入数据时发生休眠错误_Java_Sql Server_Hibernate - Fatal编程技术网

Java 在具有组合键的相关实体之间插入数据时发生休眠错误

Java 在具有组合键的相关实体之间插入数据时发生休眠错误,java,sql-server,hibernate,Java,Sql Server,Hibernate,我正在尝试将数据插入@manytone关系端的实体中。两个表共享一个复合主键(尽管数据库根本没有任何约束)。我已将我的相关实体建模如下: 实体一: @Builder @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "EMP_GOALS_PHASES") public class EmployeeGoalsAssessmentPhasesJPA implements Serializable { @ManyToOn

我正在尝试将数据插入@manytone关系端的实体中。两个表共享一个复合主键(尽管数据库根本没有任何约束)。我已将我的相关实体建模如下:

实体一:

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "EMP_GOALS_PHASES")
public class EmployeeGoalsAssessmentPhasesJPA implements Serializable {

    @ManyToOne
    @JoinColumns({
            @JoinColumn(name = "APP_ID", referencedColumnName = "APP_ID"),
            @JoinColumn(name = "EMP_ID", referencedColumnName = "EMP_ID"),
            @JoinColumn(name = "CYCLE_ID", referencedColumnName = "CYCLE_ID"),
            @JoinColumn(name = "GOAL_ID", referencedColumnName = "GOAL_ID")
    })
    private EmployeeGoalsAssessmentJPA goalId;

    @Id
    @Column(name = "PHASE_ID")
    private Long phaseId;

    @Id
    @Column(name = "APP_ID")
    private Long appId;

    @Id
    @Column(name = "EMP_ID")
    private Long empId;

    @Id
    @Column(name = "CYCLE_ID")
    private Long cycleId;

    @Id
    @Column(name = "GOAL_ID")
    private Long goalIdentifier;

    @Column(name = "GOAL_RATE")
    private Double goalRate;

    @Column(name = "GOAL_WEIGHTED")
    private Double goalWeightedRate;

    @Column(name = "GOAL_COMMENT")
    private String goalComment;

    @Embedded()
    @AttributeOverrides({
            @AttributeOverride(name = "empId", column = @Column(name = "CREATED_BY")),
            @AttributeOverride(name = "creationDate", column = @Column(name = "CREATION_DATE")),
            @AttributeOverride(name = "updatedByEmpId", column = @Column(name = "LAST_UPDATED_BY")),
            @AttributeOverride(name = "lastUpdatedOn", column = @Column(name = "LAST_UPDATED_DATE")),
    })
    private ChangeHistory historyOfChanges;

第二实体:

@Builder
@AllArgsConstructor
@Entity
@Table(name="EMP_GOALS")
public class EmployeeGoalsAssessmentJPA implements Serializable{


    @Id
    @Column(name="APP_ID")
    private Long appId;

    @Id
    @Column(name="EMP_ID")
    private Long empId;

    @Id
    @Column(name="CYCLE_ID")
    private Long periodId;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "goals2019_generator")
    @SequenceGenerator(name="goals2019_generator", sequenceName = "GOALS2019_SEQ", allocationSize=25)
    @Column(name="GOAL_ID", nullable = false)
    private Long goalId;

    @Column(name = "GOAL_NAME")
    private String goalName;

    @Column(name="GOAL_DESC")
    private String description;

    @Column(name="GOAL_POSITION")
    private Long goalPosition;

    @Column(name="GOAL_MEASURE")
    private String goalMeasure;

    @Column(name="GOAL_WEIGHT")
    private Double goalWeight;

    @ManyToOne
    @JoinColumn(name = "MID_REV_STATUS_ID")
    private MidReviewStatusJPA midReviewStatus;

    @Column(name="MID_REV_COMMENT")
    private String midReviewComment;

    @OneToMany( mappedBy = "goalId", fetch = FetchType.EAGER)
    private Set<EmployeeGoalsAssessmentPhasesJPA> goalsAssessmentPhases = new HashSet<>();

    @Embedded
    @AttributeOverrides({
            @AttributeOverride(name = "empId", column = @Column(name = "CREATED_BY")),
            @AttributeOverride(name = "creationDate", column = @Column(name = "CREATION_DATE")),
            @AttributeOverride(name = "updatedByEmpId", column = @Column(name = "LAST_UPDATED_BY")),
            @AttributeOverride(name = "lastUpdatedOn", column = @Column(name = "LAST_UPDATED_DATE")),
    })
    private ChangeHistory historyOfChanges;
现在,显然这个索引13不是我表中的东西,那么为什么Hibernate要用它来插入数据呢?我不知道Hibernate是如何工作的。我认为我的模型也很混乱,因为组合键处理不当,但是我想了解那里发生了什么


业务目标很简单:能够为一个目标保存多个阶段,并在更新时进行更新。为了简洁起见,我省略了getter、setter、equals和hashCode。我的数据库是SQL Server。

insert语句接受12个参数(12个问号?,位置),但有13个参数”。绑定参数[13]为[BIGINT]-[1900]是的,我知道这一点。我唯一想知道的是,hibernate如何、何时以及在何处包含此参数。我正在尝试保存我使用lombok builder预先准备的整个对象,因此它只包含classI的一个字段。我设法找出第13个参数来自关系的父实体,它是目标ID,which被注释为这个实体的@Id(4个中的一个),但我不知道为什么hibernate希望它作为该实体的另一个字段,因为我已经在关系中定义了它
select
        employeego_.PHASE_ID,
        employeego_.GOAL_ID,
        employeego_.EMP_ID,
        employeego_.CYCLE_ID,
        employeego_.APP_ID,
        employeego_.GOAL_COMMENT as GOAL_COM6_11_,
        employeego_.CYCLE_ID as CYCLE_ID4_11_,
        employeego_.GOAL_ID as GOAL_ID2_11_,
        employeego_.EMP_ID as EMP_ID3_11_,
        employeego_.APP_ID as APP_ID5_11_,
        employeego_.GOAL_RATE as GOAL_RAT7_11_,
        employeego_.GOAL_WEIGHTED as GOAL_WEI8_11_,
        employeego_.CREATION_DATE as CREATION9_11_,
        employeego_.CREATED_BY as CREATED10_11_,
        employeego_.LAST_UPDATED_DATE as LAST_UP11_11_,
        employeego_.LAST_UPDATED_BY as LAST_UP12_11_ 
    from
        EMP_GOALS_PHASES employeego_ 
    where
        employeego_.PHASE_ID=? 
        and employeego_.GOAL_ID=? 
        and employeego_.EMP_ID=? 
        and employeego_.CYCLE_ID=? 
        and employeego_.APP_ID=?
Hibernate: 
    select
        employeego_.PHASE_ID,
        employeego_.GOAL_ID,
        employeego_.EMP_ID,
        employeego_.CYCLE_ID,
        employeego_.APP_ID,
        employeego_.GOAL_COMMENT as GOAL_COM6_11_,
        employeego_.CYCLE_ID as CYCLE_ID4_11_,
        employeego_.GOAL_ID as GOAL_ID2_11_,
        employeego_.EMP_ID as EMP_ID3_11_,
        employeego_.APP_ID as APP_ID5_11_,
        employeego_.GOAL_RATE as GOAL_RAT7_11_,
        employeego_.GOAL_WEIGHTED as GOAL_WEI8_11_,
        employeego_.CREATION_DATE as CREATION9_11_,
        employeego_.CREATED_BY as CREATED10_11_,
        employeego_.LAST_UPDATED_DATE as LAST_UP11_11_,
        employeego_.LAST_UPDATED_BY as LAST_UP12_11_ 
    from
        EMP_GOALS_PHASES employeego_ 
    where
        employeego_.PHASE_ID=? 
        and employeego_.GOAL_ID=? 
        and employeego_.EMP_ID=? 
        and employeego_.CYCLE_ID=? 
        and employeego_.APP_ID=?
2019-12-16 19:44:26,720 TRACE  BasicBinder:65 - binding parameter [1] as [BIGINT] - [30]
2019-12-16 19:44:26,720 TRACE  BasicBinder:65 - binding parameter [2] as [BIGINT] - [1900]
2019-12-16 19:44:26,720 TRACE BasicBinder:65 - binding parameter [3] as [BIGINT] - [57]
2019-12-16 19:44:26,720 TRACE BasicBinder:65 - binding parameter [4] as [BIGINT] - [201912]
2019-12-16 19:44:26,720 TRACE  BasicBinder:65 - binding parameter [5] as [BIGINT] - [1]

insert 
    into
        EMP_GOALS_PHASES
        (GOAL_COMMENT, CYCLE_ID, GOAL_ID, EMP_ID, APP_ID, GOAL_RATE, GOAL_WEIGHTED, CREATION_DATE, CREATED_BY, LAST_UPDATED_DATE, LAST_UPDATED_BY, PHASE_ID) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        EMP_GOALS_PHASES
        (GOAL_COMMENT, CYCLE_ID, GOAL_ID, EMP_ID, APP_ID, GOAL_RATE, GOAL_WEIGHTED, CREATION_DATE, CREATED_BY, LAST_UPDATED_DATE, LAST_UPDATED_BY, PHASE_ID) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

binding parameter [1] as [VARCHAR] - [TEST IF CHILD ENTITY ONLY GETS UPDATED IF PARENT IS UPDATED]
2019-12-16 19:44:26,779 TRACE  BasicBinder:65 - binding parameter [2] as [BIGINT] - [201912]
2019-12-16 19:44:26,779 TRACE  BasicBinder:65 - binding parameter [3] as [BIGINT] - [3750]
2019-12-16 19:44:26,779 TRACE  BasicBinder:65 - binding parameter [4] as [BIGINT] - [57]
2019-12-16 19:44:26,779 TRACE  BasicBinder:65 - binding parameter [5] as [BIGINT] - [1]
2019-12-16 19:44:26,779 TRACE  BasicBinder:65 - binding parameter [6] as [DOUBLE] - [8.0]
2019-12-16 19:44:26,779 TRACE  BasicBinder:65 - binding parameter [7] as [DOUBLE] - [26.6]
2019-12-16 19:44:26,779 TRACE  BasicBinder:65 - binding parameter [8] as [DATE] - [2019-12-16]
2019-12-16 19:44:26,779 TRACE BasicBinder:65 - binding parameter [9] as [BIGINT] - [57]
2019-12-16 19:44:26,780 TRACE  BasicBinder:65 - binding parameter [10] as [DATE] - [2019-12-16]
2019-12-16 19:44:26,780 TRACE  BasicBinder:65 - binding parameter [11] as [BIGINT] - [57]
2019-12-16 19:44:26,780 TRACE  BasicBinder:65 - binding parameter [12] as [BIGINT] - [30]
2019-12-16 19:44:26,780 TRACE BasicBinder:65 - binding parameter [13] as [BIGINT] - [1900]
2019-12-16 19:44:26,781 INFO   AbstractBatchImpl:193 - HHH000010: On release of batch it still contained JDBC statements
2019-12-16 19:44:26,781 WARN   SqlExceptionHelper:137 - SQL Error: 0, SQLState: S1093
2019-12-16 19:44:26,781 ERROR  SqlExceptionHelper:142 - The index 13 is out of range.