2009-07-22 152 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上! 當敦註釋此錯誤發生時: 表示另一個對象與此標識符存在。 我必須先刪除所有相關對象到分支然後再設置它們嗎?