Domanda

Ho un dubbio, cioè quando creiamo One-to-Many come bidirezionale. Metteremo un riferimento di classe genitore nella classe figlio.

vedere il codice.

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;
         ....
         ....
}

Indirizzo.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;
           ....
           ....
    }

qui Person.java è la classe genitore e Indirizzo.java è la classe figlio. Quando prendiamo l'oggetto genitore dalla base di dati, sta caricando la classe figlio. va bene. nessun problema.

Ma in viceversa ie. Se stiamo prendendo la classe figlio tiene anche la classe genitore (persona).

Ad esempio: recuperiamo l'indirizzo per ID indirizzo. Supponiamo solo recuperati 100 indirizzi dalla base di dati.

Ma nella classe di indirizzi persona La variabile tiene l'oggetto genitore (persona) ASLO.

Il mio dubbio è qui

è l'uso Diverse 100 memoria di persona. con gli stessi dati. in Classe di indirizzi. ?

Il mio Dao è così.

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;

Supponiamo solo che la dimensione di addrsslist sia 100.

piace

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

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

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

....

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

qui Per1, per2 .... e per 99 stanno usando la stessa memoria o diversi.

se lo stesso va bene .. altrimenti potrebbe causare qualsiasi problema di utilizzo di memoria.

AIUTO PLS ...

È stato utile?

Soluzione

Hibernate esegue il controllo dell'identità. Una sessione in letargo contiene solo un'istanza singola di un oggetto con lo stesso ID. Quindi, se per, per1, ... per99 è una persona, avrai un oggetto per questo. Altrimenti - oggetti diversi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top