Java 初始化后删除hibernate enum@elementcollection
我有一个简单的枚举:Java 初始化后删除hibernate enum@elementcollection,java,hibernate,collections,enums,mapping,Java,Hibernate,Collections,Enums,Mapping,我有一个简单的枚举: public enum Privilege implements Serializable { P1, P2, P3; } 映射到如下实体中: @Entity @Table(name = "rol_roles", uniqueConstraints = {...) public class Role extends AbstractSomething { ... @ElementCollection(targetCl
public enum Privilege implements Serializable {
P1,
P2,
P3;
}
映射到如下实体中:
@Entity
@Table(name = "rol_roles",
uniqueConstraints = {...)
public class Role extends AbstractSomething {
...
@ElementCollection(targetClass = Privilege.class, fetch = FetchType.LAZY)
@CollectionTable(name = "rol_roles_privileges",
joinColumns =
@JoinColumn(name = "role_id"))
@Column(name = "privilege", nullable = false)
@Enumerated(EnumType.STRING)
private Set<Privilege> privileges = EnumSet.noneOf(Privilege.class);
public Set<Privilege> getPrivileges() {
return privileges;
}
public void setPrivileges(Set<Privilege> privileges) {
this.privileges = privileges;
}
}
create table rol_roles_privileges (
role_id int8 not null,
privilege varchar(255) not null,
primary key (role_id, privilege)
);
由于集合是惰性的,所以privilege和delete语句将继续进行集合初始化。我尝试按照类似线程中的建议添加@OrderColumn注释,但没有帮助。
在类似的情况下,并没有insert语句,所以读取对象只是刷出集合。
表是这样创建的:
@Entity
@Table(name = "rol_roles",
uniqueConstraints = {...)
public class Role extends AbstractSomething {
...
@ElementCollection(targetClass = Privilege.class, fetch = FetchType.LAZY)
@CollectionTable(name = "rol_roles_privileges",
joinColumns =
@JoinColumn(name = "role_id"))
@Column(name = "privilege", nullable = false)
@Enumerated(EnumType.STRING)
private Set<Privilege> privileges = EnumSet.noneOf(Privilege.class);
public Set<Privilege> getPrivileges() {
return privileges;
}
public void setPrivileges(Set<Privilege> privileges) {
this.privileges = privileges;
}
}
create table rol_roles_privileges (
role_id int8 not null,
privilege varchar(255) not null,
primary key (role_id, privilege)
);
奇怪的是(也许不是),当我设置fetchtype.EAGER时,它可以工作——但它不应该在lazy上工作吗
我使用的是hibernate 4.2.0.Final、SpringData、PostreSQL和hibernate。为未来的谷歌用户启用“惰性加载”和“无传输”:
当使用enable\u lazy\u load\u no\u trans时,hibernate 4.2似乎有问题。
此错误可能与
它正在记录:
日志:
错误AssertionFailure:43-HHH000099:发生了断言失败(这可能表示Hibernate中存在错误,但更可能是由于会话使用不安全):org.Hibernate.AssertionFailure:集合所有者与会话不关联:org.Hibernate.test.ondemandload.Store.Inventures
WARN AbstractPersistentCollection:246-无法关闭用于加载与无会话关联的惰性集合的临时会话
我现在使用的是Hibernate4.1.7,所有这些都可以在惰性加载下正常工作