2009-07-22 7 views
0

J'ai ces classes:Mise en veille prolongée Enregistrer l'objet Question

@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 

Comme vous pouvez le voir ces tableau ont relation avec HumnEntity et PictureEntity et ... table. dans ma couche de domaine J'ai une classe de branche qui dépendait de la table de branche et de toute sa relation. lorsque le domaine passer un objet branche et je veux changer la branche dans la base de données j'ai un problème qui explique ci-dessous. Dans la couche de domaine dans la classe humaine je n'ai pas d'identificateur (clé primaire) puis quand je veux SaveOrUpdate (brancheEntity) je dois placer tous les attributs mais quand je veux définir branchEntity.setHumanEntity je dois réexaminer et obtenir l'identificateur de base de données et mettre à humanEntity définit ensuite branchEntity.setHumanEntity. Je veux savoir que c'était vrai? ou je me trompe où? suis-je obligé de garder HumanEntity Identifier dans Ma classe humaine dans le domaine Layer? En effet je ne sais pas ce qui se passe exactement quand save ou SaveOrUpdate ou Update ou ... et Object qui ont RElation avec un autre objet? comment dois-je gérer cet objet?

+0

Votre question n'est pas facile à suivre; excuses si je suis malentendu. Pourquoi votre HumanEntity n'a-t-il pas d'identifiant dans la couche de domaine? Je peux voir votre BranchEntity, "id". –

+0

c'est je veux savoir, si je dois avoir HumanENtity Id dans Ma classe Human in Domain alors je refactorise mon code Et l'ajouter mais Logicaly je n'ai pas besoin de cet identifiant dans Mon domaine – Am1rr3zA

Répondre

0

Permettez-moi dit mon problème exact quand je veux changer ma branche de table J'utilise cette branchDao.update(be);

mais par ce code que j'ai erreur:

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); 

quand je commente be.setHuman(he); c'est mise à jour Branch, mais mettre null sur human_fk !!! lorsque dun commenter cette erreur s'est produite: a déclaré un autre objet avec cet identifiant Existe. Est-ce que je dois d'abord supprimer tous les objets liés à Branche puis les redéfinir?

+0

quelle est l'erreur – shareef

Questions connexes