Bru*_*tti 3 java hibernate jpa
我按照这篇文章来解决我最初的问题: 在子类的 Hibernate 中指定每个表的不同序列
但现在我得到一个例外:
init 方法调用失败;嵌套异常是 java.lang.IllegalArgumentException: Duplicate generator name idgen
在我的类、子类和 pom.xml 下面:
EntityId(抽象类)
@MappedSuperclass
public abstract class EntityId<T extends Serializable> implements Serializable {
private static final long serialVersionUID = 1974679434867091670L;
@Id
@GeneratedValue(generator="idgen", strategy=GenerationType.SEQUENCE)
@Column(name="id")
protected T id;
public T getId() {
return id;
}
public void setId(T id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
类别类
@Entity
@SequenceGenerator(name="idgen", sequenceName="cat_id_seq", allocationSize=1)
@AttributeOverrides({
@AttributeOverride(name="id", column = @Column(name="cat_id"))
})
@Table(name="categoria")
public class Category extends EntityId<Integer> {
private static final long serialVersionUID = -870288485902136248L;
@Column(name="name")
private String name;
@Column(name="description")
private String description;
}
Run Code Online (Sandbox Code Playgroud)
pom.xml
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.15.Final</version>
</dependency>
...
Run Code Online (Sandbox Code Playgroud)
我的问题与这篇文章类似:https : //hibernate.atlassian.net/browse/HHH-12329
从您提供的链接。JPA 规范说:
可以在实体类或主键字段或属性上指定序列生成器。生成器名称的范围对于持久性单元是全局的(跨所有生成器类型)。
因此,拥有两个名称相同但配置不同的标识符生成器是不合法的。范围是全局的,而不是实体。
要解决您的问题,您应该将 @Id 从 @MappedSuperclass 推送到子类中。
编辑,添加了可能的解决方法:
public interface EntityId<T extends Serializable> extends Serializable {
public T getId();
public void setId(T id);
}
@Entity
@Table(name="categoria")
public class Category implements EntityId<Integer> {
private static final long serialVersionUID = -870288485902136248L;
@Id
@Column(name="cat_id")
@SequenceGenerator(name="cat_id_gen", sequenceName="categoria_cat_id_seq", allocationSize=1)
@GeneratedValue(generator="cat_id_gen", strategy=GenerationType.SEQUENCE)
private Integer id;
//others attributes here...
@Override
public void setId(Integer id) {
this.id = id;
}
@Override
public Integer getId() {
return this.id;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7875 次 |
| 最近记录: |