这里有hibernate(4.3)的问题。希望你能帮帮我。
我有一个bean类,它有另一个bean的Collection(显式为Set)。 如果我更新集合中的条目,我想在数据库中更新所有内容。
我的豆子:
@Entity
@Table(name = "Subprograms")
public class Subprogram implements IEntity, Serializable {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@OneToMany(mappedBy = "subprogram", fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL)
private Set<SubprogramConfig> subprogramConfig = new HashSet<SubprogramConfig>();
public Subprogram() {
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
public Set<SubprogramConfig> getSubprogramConfigSet() {
return subprogramConfig;
}
public void setSubprogramConfigSet(Set<SubprogramConfig> SubprogramConfig) {
this.subprogramConfig = subprogramConfig;
}
}
代码:
@Entity
@Table(name = "Subprogram_config")
public class SubprogramConfig implements IEntity, Serializable {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@ManyToOne
@JoinColumn(name = "fk_subprogram")
private Subprogram subprogram;
public SubprogramConfig() {
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
public Subprogram getSubprogram() {
return subprogram;
}
public void setSubprogram(subprogram subprogram) {
this.subprogram = subprogram;
}
}
要说的是我克隆了一个对象并在我的Java程序中使用该副本。当我想保存它时,hibernate会话所持有的对象应该更新。
我的Hibernate Manager类执行此操作:
public static List<IEntity> executeUpdate(List<IEntity> entityList) {
session.beginTransaction();
entityList.forEach(entity -> {
Object persistentObj = session.load(entity.getClass(), entity.getId());
try {
BeanUtils.copyProperties(persistentObj, entity);
} catch (Exception e) {
e.printStackTrace();
}
session.merge(persistentObj);
});
session.getTransaction().commit();
return entityList;
}
当我现在对Collection进行一些操作(添加和删除项目)并使用我的Manager保存它时,数据库不会更新。 你能帮忙吗?
添加: executeUpdate方法仅在数据库中执行更新,并通过中间件中的命令使用toSave-list调用。 在我的Collection上执行添加/删除操作的代码在按钮侦听器中......我通过程序调试并且新的子程序集合是正确的。
turnOffCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JCheckBox cb = (JCheckBox) e.getSource();
if (cb.isSelected()) {
// Create new Entity
SubprogramConfig newCfg = new SubprogramConfig();
newCfg.setSubprogram(entity);
// Add to the Subprogram Entity
entity.getSubprogramConfigSet().add(newCfg);
}
}
});
&#13;