Question

j'ai un doute, qui est quand nous créons one-to-many comme bidirectionnel. nous allons mettre une référence de classe parent dans la classe des enfants.

voir le code.

Person.java

@Entity
@Table(name="PERSON")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="personId")
     private int id;
    @Column(name="personName")
    private String name;
    @OneToMany(cascade =CascadeType.ALL,fetch = FetchType.LAZY)
    @JoinColumn(name="personId") 
    private Set <Address> addresses;
         ....
         ....
}

Address.java

@Entity
@Table(name = "ADDRESS")
public class Address {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "addressId")
    private int id;
    @Column(name = "address",nullable=false)
    private String address;
    @ManyToOne(cascade =CascadeType.ALL)
    @JoinColumn(name="personId",nullable=false)
    private Person person;
           ....
           ....
    }

ici Person.java est la classe mère et Address.java est classe enfant. lorsque nous récupérons l'objet parent de la base de données, il est classe de chargement des enfants. c'est bon. pas problèm.

mais vice-versa par exemple. si nous récupérions la classe des enfants, il est également tenue classe parente (personne) .

par exemple: nous récupérons Adresse par identifiant d'adresse. simplement supposer récupéré 100 l'adresse de la base de données.

mais en classe d'adresses attente personne variable ASLO objet parent (personne).

mon doute est ici

est l'utilisation 100 différent mémoire de la personne. avec les mêmes données. Adresse classe.

mon dao est comme ça.

public List<Address> getAllAddressByPersonId(int personId) {
        List<Address> addressList =  null;
        try {
            DetachedCriteria criteria = DetachedCriteria.forClass(Address.class);
            criteria.createCriteria("person").add(Restrictions.eq("id", personId));
            addressList = getHibernateTemplate().findByCriteria(criteria);
        } catch (HibernateException e) {
            e.printStackTrace();
        } catch (DataAccessException e) {
            e.printStackTrace();
        }

        return addressList;

supposons que la taille de addrssList 100.

comme

per =  addressList.get(0).getPerson() , 

per 1 = addressList.get(1).getPerson(),

per2 = addressList.get(2).getPerson(),

....

per99 =  addressList.get(99).getPerson(). 

ici per1, PER2 .... et par 99 utilisent même mémoire ou différents.

si même il est ok .. sinon il peut causer de toute question d'exécution de plus l'utilisation de la mémoire.

aide pls ...

Était-ce utile?

La solution

Hibernate contrôle d'identité. Une session veille prolongée ne contient qu'une seule instance d'un objet avec le même ID. Donc, si par, per1, ... per99 est une personne, vous avez un objet pour elle. Dans le cas contraire - différents objets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top