Java Dropwizard Hibernate 1.0.0
我遇到了一个问题,即一对多关系之间的双向映射,其中多个关系没有更新其外键-在执行更新/创建时,它仍然为空。有两个实体,第一个(多个)是: 第二个是:Java Dropwizard Hibernate 1.0.0,java,hibernate,dropwizard,Java,Hibernate,Dropwizard,我遇到了一个问题,即一对多关系之间的双向映射,其中多个关系没有更新其外键-在执行更新/创建时,它仍然为空。有两个实体,第一个(多个)是: 第二个是: @Entity @Table(name = "PERSON") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING
@Entity
@Table(name = "PERSON")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "P")
public abstract class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "person")
private Collection<Availability> availabilities;
此时员工没有id。可用性设置为Person(也没有id)
在引擎盖下,这只是调用以下命令:
public Staff update(Staff staff) {
return persist(staff);
}
protected E persist(E entity) throws HibernateException {
currentSession().saveOrUpdate(requireNonNull(entity));
return entity;
}
我是否应该使用会话管理器打开一个新事务,持久化person,取回id,将其设置为availability,然后使用修改后的availability对person执行更新?在我看来,这似乎是错误的。问题在于,这并不是一种真正的双向关系,而且Person从未被设置为可用性-因此外键为空 我把它改成了单向的 论个人、阶级
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "person_availability")
private List<Availability> availabilities;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“人员可用性”)
私有列表可用性;
然后在Availability.class I上删除了双向引用,即删除了个人价值引用
所需的另一个更改是使用级联类型设置事务策略
字段注释策略不是这里的问题。问题在于它不是真正的双向关系,并且Person从未设置为可用性-因此外键为空 我把它改成了单向的 论个人、阶级
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "person_availability")
private List<Availability> availabilities;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“人员可用性”)
私有列表可用性;
然后在Availability.class I上删除了双向引用,即删除了个人价值引用
所需的另一个更改是使用级联类型设置事务策略
字段注释策略不是这里的问题