Performance 一对多双向性能问题

Performance 一对多双向性能问题,performance,memory-leaks,one-to-many,hibernate-onetomany,Performance,Memory Leaks,One To Many,Hibernate Onetomany,我有一个疑问,那就是当我们创造一对多的双向。我们将在子类中放置一个父类引用 请参阅代码 Person.java @Entity @Table(name="PERSON") public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="personId") private int id; @Column(name="personName")

我有一个疑问,那就是当我们创造一对多的双向。我们将在子类中放置一个父类引用

请参阅代码

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;
         ....
         ....
}
这里Person.java是父类,Address.java是子类。 当我们从数据库中获取父对象时,它正在加载子类。很好。没问题

但反之亦然,也就是说,如果我们获取子类,它也包含父类person

我们通过地址id获取地址。假设从数据库中检索到100个地址

但在address类person变量中,parentPerson对象也包含在其中

我的怀疑就在这里

是用不同的记忆的人。使用相同的数据。在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;
这里是per1,per2。。。。和PER99使用相同或不同的内存

如果一样的话,也可以。。否则,可能会导致更多内存利用率的执行问题


帮助请…

Hibernate进行身份检查。一个hibernate会话只包含具有相同ID的对象的单个实例。因此,如果per,per1,…per99是一个人,那么您将拥有一个对象。否则-不同的对象。

您的意思是它不能再使用一个内存空间,速率?对不起。我不太明白你的问题。对象人只有一个。还有谁可以使用更多的内存空间?
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;
per =  addressList.get(0).getPerson() , 

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

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

....

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