使用Hibernate Bean进行Java映射

时间:2014-12-22 23:16:05

标签: java hibernate collections mapping persistence

这里有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上执行添加/删除操作的代码在按钮侦听器中......我通过程序调试并且新的子程序集合是正确的。

&#13;
&#13;
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;
&#13;
&#13;

0 个答案:

没有答案