我有一個疑問,那就是當我們創建一個到多爲雙向。我們將在子類中放置一個父類引用。一個一對多的雙向性能問題
看到的代碼。
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使用同一存儲器或不同的。
如果同樣是確定..否則可能會導致更多的內存利用率的任何執行問題?
幫助請...
還沒有任何評論? – jaleel
免費評論球員.. – jaleel