私は1つの疑問があります。つまり、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;
....
....
}
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メモリを使用しているです。同じデータでin 住所class。?
私のDAOはこれのようです。
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のサイズはここ
per = addressList.get(0).getPerson() ,
per 1 = addressList.get(1).getPerson(),
per2 = addressList.get(2).getPerson(),
....
per99 = addressList.get(99).getPerson().
ようPER1、PER2 .... 99ごとに同一のメモリまたは異なるを使用している100
であると仮定する。
同じ場合はOKです。それ以外の場合は、メモリ使用率が向上する問題が発生する可能性があります。
助けplsは...
コメントはありません。 – jaleel
自由に意見を言う人.. – jaleel