我把一个entity配置成一棵树,添加,查询这个棵树都没有问题,当我更新他的父节点的时候他并没有发送SQL语句,可是更新其他属性,比如name就可以。
tmp.setParent(其他节点或null)//失败,没有发送SQL语句
tmp.setName(xxxx)//可以更新成功
@Entity
@Table(name="_materialCategory")
public class MaterialCategory { private int id;

private String name;

private int level;

private int position;

private boolean leaf;

private MaterialCategory parent;

private List<MaterialCategory> children = new ArrayList<MaterialCategory>(); @Id
@GeneratedValue
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getLevel() {
return level;
} public void setLevel(int level) {
this.level = level;
} public int getPosition() {
return position;
} public void setPosition(int position) {
this.position = position;
} public boolean isLeaf() {
return leaf;
} public void setLeaf(boolean leaf) {
this.leaf = leaf;
} @ManyToOne
@JoinColumn(name="pid")
public MaterialCategory getParent() {
return parent;
} public void setParent(MaterialCategory parent) {
this.parent = parent;
} @OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="pid")
public List<MaterialCategory> getChildren() {
return children;
} public void setChildren(List<MaterialCategory> children) {
this.children = children;
}

public void addChild(MaterialCategory mc) {
children.add(mc);
}


}

解决方案 »

  1.   

    如果我猜的不错你所有的更新全部失败, 你用的是hibernate 里面的更新方法吗?
      

  2.   

    你看看是不是 hibernate 的缓冲问题  在更新前 你 session.clear()  试试
      

  3.   

    全部更新失败是什么意思?只更新其他属性就可以,更新父节点就不行,我用的是hibernateTemplate.update刚才试了下,删除一个节点也删不了,我在怀疑配置少了什么
      

  4.   


    @Test
    public void updateTest() {
    //MaterialCategory mc1 = service.get(8);
    MaterialCategory mc2 = service.get(4);
    mc2.setParent(null);
    service.update(mc2);
    }

    @Test
    public void deleteTest() {
    MaterialCategory mc = service.get(4);
    service.delete(mc);
    }
      

  5.   

    受不了- -!,竟然忘记用了spring的自动rollback了,刚才更新name属性确实更新进去了,害得我以为没有rollback