有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA组合主键/外键映射

我有两张桌子

enter image description here

然后我尝试使用类似@EmbeddableThis reference进行映射

一周的努力。java

@Entity 
@IdClass(Week_Effort.class)
@Table(name = "week_effort")
public class Week_Effort implements Serializable  {

private static final long serialVersionUID = -2825819221813101109L;

@Id
@Column(name="week_id") 
private int week_id;

@Id
@Column(name="timesheet_id")
private int timesheet_id;

@Column(name="day1")
private int day1;

@ManyToOne(fetch = FetchType.LAZY ,cascade=CascadeType.ALL)
@JoinColumn(name="timesheet_id" , referencedColumnName =     "timesheet_id",insertable=false, updatable=false , foreignKey =   @ForeignKey(name = "fkweekts"))
private Timesheet timesheet_id ;
.
.
.
//get and set
}

时间表。java

@Entity
@Table(name = "timesheet")
public class Timesheet implements Serializable{

private static final long serialVersionUID = 7014333990749288304L;

@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "timesheet_id")
private int timesheet_id;

@OneToMany(mappedBy="timesheet_id" , cascade=CascadeType.ALL)
private Set<Week_Effort> weekeffort ;
.
.
.
//get and set 

}

周末。java

@Embeddable
public class WeekEmbed implements Serializable {

private static final long serialVersionUID = 3229945076116848141L;

int timesheet_id;
int week_id;

//get set

}

我使用AJAX将参数发布为类似json的格式

{"timesheet_id":1,"day1":"8"} //and more 6 parameter

week_id由某个进程生成,然后在Jparepository中使用CRUD添加之前进行设置。但是错误

java.sql.SQLException: Parameter index out of range (10 > number of parameters, which is 9)

如何解决这个问题?我做错了什么


共 (1) 个答案

  1. # 1 楼答案

    发件人:Hibernate: Parameter index out of range (8 > number of parameters, which is 7)

    我把@IdClass改为周末。类并删除某些部分,然后将@Id添加到对象映射中

    一周的努力。java

    @Entity 
    @IdClass(WeekEmbed.class)
    @Table(name = "week_effort")
    public class Week_Effort implements Serializable  {
    
    private static final long serialVersionUID = -2825819221813101109L;
    
    @Id
    @Column(name="week_id") 
    private int week_id;
    
    //Delete this part
    //@Id
    //@Column(name="timesheet_id")
    //private int timesheet_id;
    
    @Column(name="day1")
    private int day1;
    
    @Id
    @ManyToOne(fetch = FetchType.LAZY )
    @JoinColumn(name="timesheet_id" , referencedColumnName = "timesheet_id",insertable=false, updatable=false , foreignKey = @ForeignKey(name = "fkweekts"))
    private Timesheet timesheet_id ;
    .
    .
    .
    //get and set
    }