1
なぜHibernateは既存のIDを持つ新しいレコードを挿入しようとしますか?なぜHibernateは既存のIDを持つ新しいレコードを挿入しようとしますか?
カテゴリーテーブルの前に
//Category{id=0, name='NAME', image='IMAGE', parent=null}
getCurrentSession().save(category);
にid 2.
カテゴリーJavaコード
@Entity
@Table(name = "CATEGORY",
indexes = {
@Index(name = "CATEGORY_NAME_INDEX",
columnList = "CATEGORY_NAME")})
public class Category implements NamedModel {
@Id
@Column(name = "CATEGORY_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@NotNull
@Size(min = 1, max = 256)
@Column(name = "CATEGORY_NAME", length = 256)
private String name;
@OneToOne(fetch = FetchType.EAGER)
@JoinTable(name = "CATEGORY_RELATIONS",
joinColumns = {
@JoinColumn(name = "CATEGORY_RELATIONS_CATEGORY_ID",
referencedColumnName = "CATEGORY_ID")},
inverseJoinColumns = {
@JoinColumn(name = "CATEGORY_RELATIONS_PARENT_ID",
referencedColumnName = "CATEGORY_ID")})
private Category parent;
@OneToMany(cascade = {CascadeType.REMOVE, CascadeType.PERSIST},
fetch = FetchType.LAZY, mappedBy = "parent")
private List<Category> children;
}
で挿入されるべき(挿入して手動で充填した)
ID | NAME | IMAGE
1 | 'NAME'| 'IMAGE'
保存コードを保存
SOLUTION
//Category
@GeneratedValue(strategy = GenerationType.IDENTITY)
//CategoryRelations
@Entity
@IdClass(CategoryRelationsPrimaryKey.class)
public static class CategoryRelationsPrimaryKey implements Serializable {
private Long categoryId;
private Long parentId;
の代わりに長いです。