1 つ疑問があります。それは、1 対多を双方向として作成する場合です。子クラスに 1 つの親クラス参照を配置します。
コードを参照してください。
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;
....
....
}
アドレス.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は子クラスです。データベースから親オブジェクトを取得すると、子クラスがロードされます。それは結構です。問題ありません。
しかし、その逆です。子クラスを取得している場合は、親クラス(person)も保持しています。
例: アドレス ID で Address をフェッチします。データベースから 100 件の住所を取得したと仮定します。
しかし、アドレス クラスのperson変数では、親 (Person) オブジェクトも保持します。
私の疑問はここにあります
人によって使い分けられる100個のメモリー です。同じデータで。Address クラスで。?
私のダオはこんな感じです。
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 .... および per 99は同じメモリを使用しているか、異なるメモリを使用しています。
同じ場合は問題ありません..そうでない場合、メモリ使用率が高くなるという問題が発生する可能性があります.?
助けてください...