Frage

Ich habe einen Zweifel, dann erschaffen wir uns Eins-zu-Many als bidirektional. Wir werden eine Elternklasse in der untergeordneten Klasse einsetzen.

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

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

hier Person.java ist Elternklasse und Adresse.java ist Kinderklasse. Wenn wir das übergeordnete Objekt von der Datenbank abrufen, lädt es die untergeordnete Klasse. es ist in Ordnung. Kein Proble.

Aber in umgekehrt, dh. Wenn wir eine Kinderklasse holen, hält es auch über Elternklassen (Person).

ZB: Wir holen die Adresse per Adress -ID. Nehmen Sie einfach an, abgerufene 100 -Adresse von der Datenbank.

Aber in der Adressklasse Person Variable halten das übergeordnete (Person) Objekt Aslo.

Mein Zweifel ist hier

wird benutzt Andere 100 Speicher von Person. mit den gleichen Daten. in Adressklasse. ?

Mein Dao ist so.

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;

Nehmen Sie einfach an, die Größe von adrsslist beträgt 100.

wie

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

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

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

....

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

hier Per1, Per2 .... und pro 99 verwenden denselben Speicher oder unterschiedlich.

Wenn es gleich ist, ist es in Ordnung. Andernfalls kann es eine Ausführung von mehr Speicherauslastung verursachen?

Hilf bitte ...

War es hilfreich?

Lösung

Hibernate führt Identitätsprüfung durch. Eine Hibernate -Sitzung enthält nur eine einzelne Instanz eines Objekts mit derselben ID. Wenn PER, Per1, ... Per99 eine Person ist, haben Sie ein Objekt dafür. Ansonsten - verschiedene Objekte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top