我有两个表EmployeeGroup表和EmpplyeeDetails表。 EmployeeGroupTable具有应从数据库序列GroupIdGenerator生成的主键groupid。 EmployeeDetails有两个主键,分别是groupid和employeeid。 Groupid应该与上一个表相同,employeeid还应该具有递增的值,例如1,2,3。 两个表中的这些值应插入一个事务中。 您能帮我正确映射吗?
我已经尝试过使用生成值和序列生成器的不同组合,但是无法将数据保存到表中。
@Entity
@Table(name="EMPLOYEE_GROUP")
public class EmployeeGroup {
@Column(name = "GROUP_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
"groupid-gen")
@Id
@NotNull
@SequenceGenerator(name = "groupid-gen", sequenceName =
"GROUIP_ID_GENERATOR" )
private long groupId;
@OneToMany(mappedBy = "employeeDetail")
private List<EmployeeDetail> employeeDetails;
}
@Entity
@Table(name = "EMPLOYEE_DETAIL")
@IdClass(EmployeeID.class)
public class EmployeeDetail {
@ManyToOne
@JoinColumn(name = "GROUP_ID", insertable=false , updatable=false)
private EmployeeGroup employeeGroup;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
"groupid-gen")
@SequenceGenerator(name = "groupid-gen", sequenceName =
"GROUIP_ID_GENERATOR" )
@Column(name = "GROUP_ID")
@Nonnull
private Long groupId;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Nonnull
@Column(name = "EMPLOYEE_ID")
private Long employeeId;
}
public class EmployeeId{
private Long groupId;
private Long employeeId;
public EmployeeId(final Long groupId, final Long employeeId) {
this.groupId = groupId;
this.employeeId = employeeId;
}
public EmployeeId() {
}
}
预期结果是两个表都应具有适当的值。
表EmployeeGroup
GroupID
1
2
表EmployeeDetail
GroupId EmployeeId
1 1
1 2
1 3
2 1
2 2
我遇到错误 错误o.h.e.jdbc.spi.SqlExceptionHelper-序列“ HIBERNATE_SEQUENCE” 未找到; SQL语句: 呼叫hibernate_sequence的下一个值[90036-197] org.springframework.orm.jpa.JpaSystemException:无法准备 声明;嵌套异常为 org.hibernate.exception.GenericJDBCException:无法准备语句
答案 0 :(得分:0)
您正在混合ID生成器策略:
在类EmployeeDetail
中,您有一个groupId
的Oracle序列,但有一个GenerationType.AUTO
的{{1}}的Oracle序列
此employeeId
引起了问题。
您还必须在那里使用Oracle序列,或者,如果此ID来自其他地方,则必须删除GenerationType.AUTO
。