0

我有一個疑問,那就是當我們創建一個到多爲雙向。我們將在子類中放置一個父類引用。一個一對多的雙向性能問題

看到的代碼。

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

這裏Person.java是父類和Address.java是子類。 當我們從數據庫中獲取父對象時,它正在加載子類。沒事。沒有問題。

但反之亦然,即。如果我們正在提取子類,它也持有父類(人)

例如:我們通過地址ID獲取地址。只是假設從數據庫中檢索到100個地址。

但在地址類變量持有父(Person)對象。

我的疑問是這裏

是使用不同100內存的人。具有相同的數據。在地址類。

吾道是這樣的。

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; 

只是假設addrssList的大小是100。

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

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

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

.... 

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

這裏PER1,PER2 ....和每99使用同一存儲器或不同的。

如果同樣是確定..否則可能會導致更多的內存利用率的任何執行問題?

幫助請...

+0

還沒有任何評論? – jaleel

+0

免費評論球員.. – jaleel

回答

0

Hibernate並不身份檢查。一個hibernate會話只包含具有相同ID的對象的單個實例。因此,如果per,per1,... per99是一個人,那麼您將擁有一個對象。否則 - 不同的對象。

+0

你的意思是它不使用一個更多的內存空間,率? – jaleel

+0

對不起。我不明白你的問題。對象'人'只是一個。還有誰可以使用更多的內存空間? – kan