2009-07-22 83 views
0

我有这些类:休眠保存对象问题

@Entity 
@Table(name = "branch", uniqueConstraints = {@UniqueConstraint(columnNames = {"bname", "branch_fk"})}) 
public class BranchEntity implements Serializable { 

    @Id 
    @GeneratedValue 
    private int id; 
    @Column(name = "username", length = 64, nullable = false) 
    private String userName; 
    @Column(name = "bname", length = 64) 
    private String branchName; 
    @Column(name = "studcount") 
    private int studCount; 
    @Column(name = "blevel", columnDefinition = "int default 0") 
    private int level; 
    @Column(name = "confirmed", columnDefinition = "tinyint default 0") 
    private int confirmed; 
    @OneToMany(mappedBy = "branch", fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @OnDelete(action = OnDeleteAction.CASCADE) 
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) 
    private Set<BranchBuildingEntity> branchbuilding = new HashSet<BranchBuildingEntity>(); 
    @OneToMany(mappedBy = "branch", fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @OnDelete(action = OnDeleteAction.CASCADE) 
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) 
    private Set<PictureEntity> picture = new HashSet<PictureEntity>(); 
    @OneToOne(mappedBy = "branch", fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @OnDelete(action = OnDeleteAction.CASCADE) 
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) 
    private LoginEntity login; 
    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)  
    @JoinColumn(name = "human_fk", nullable = true) 
    private HumanEntity human; 
//some setter and getter 

正如你可以看到这些表有HumnEntity和PictureEntity和关系...表。 在我的领域层我有Branch类依赖于分支表和所有它的关系。 当域传递分支对象,我想更改数据库中的分支我有一些问题,下面解释。 在人类中的域层我没有标识符(主键),那么当我想要SaveOrUpdate(branchEntity)时,我必须设置所有的属性,但是当我想设置branchEntity.setHumanEntity时,我必须再次查询并从数据库获取标识符,并设置为然后humanEntity设置branchEntity.setHumanEntity。 我想知道那是对的?或者我错了一些地方?我是否必须在“我的人类”类中的域层中保留HumanEntity标识符? 事实上,我不知道保存或SaveOrUpdate或Update或...以及与其他对象有关系的对象时究竟发生了什么?我该如何处理这个对象?

+0

你的问题不容易遵循;如果我误解了道歉。为什么您的HumanEntity没有在域图层中有标识符?我可以看到你的BranchEntity确实是“id”。 – 2009-07-22 18:59:36

+0

这就是我想知道的,如果我必须有我的类中的HumanENtity Id在域中的人类然后我重构我的代码并添加它但Logicaly我不需要该标识符在我的域层 – Am1rr3zA 2009-07-22 19:39:49

回答

0

让我说我的确切问题 当我想改变我的表分支我用这个branchDao.update(be);

但这个代码,我有错误:当我评论be.setHuman(he);

pkId = branch.getId(); 
     uname = branch.getUsername(); 
     password = branch.getPassword(); 
     bname = branch.getName(); 
     studentCount = branch.getStudentNum(); 
     level = branch.getLevel(); 
     otherBuilding = branch.getOtherBuildings(); 
     ofname = branch.getBoss().getFirstName(); 
     olname = branch.getBoss().getLastName(); 
     oemail = branch.getBoss().getEmail(); 
     HumanEntity he = humanDao.getBossByProperties(oemail); 
     BranchEntity be = new BranchEntity(); 
     be.setHuman(he); 
     be.setId(pkId); 
     be.setBranchName(bname); 
     be.setConfirmed(confirmed); 
     be.setLevel(level); 
     be.setStudCount(studentCount); 
     be.setUserName(uname);    
     branchDao.update(be); 

它的更新分支,但放null在human_fk上! 当敦注释此错误发生时: 表示另一个对象与此标识符存在。 我必须先删除所有相关对象到分支然后再设置它们吗?