0

私は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は...

+0

コメントはありません。 – jaleel

+0

自由に意見を言う人.. – jaleel

答えて

0

HibernateはIDチェックを行います。 1つのHibernateセッションには、同じIDを持つオブジェクトのインスタンスが1つだけ含まれます。ですからper1、per1、per99が一人であれば、あなたは一つのオブジェクトを持っています。そうでなければ - 異なるオブジェクト。

+0

もう1つのメモリ空間、レートを使用しないという意味ですか? – jaleel

+0

申し訳ありません。私はあなたの質問を正確に理解していません。オブジェクト '人物'は1つだけです。他に誰がもう1つのメモリ空間を使うことができますか? – kan

関連する問題