выборка родительской таблицы Criteria один-ко-многим на основе дочерней таблицы - PullRequest
0 голосов
/ 21 октября 2011

У меня есть одна проблема в отображении «один ко многим» с использованием спящего режима.

У меня есть 2 класса: Персона и Адрес .Персона отображается по адресу (один-ко-многим), я хочу получить все Персона, где адрес = "xxxx" ;.как подготовить этот запрос, используя DetachedCriteria .ниже я добавил кусок кода из моего класса дао.Пожалуйста, помогите мне завершить его.

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;
}

Мой DAO

DetachedCriteria c = DetachedCriteria.forClass(Person.class);
        List<Person> persnList =null;
        /*here i want add some restriction for
           fetch all person whose address = "abcd"
           here address is collection. how to set restriction in it ?.

           */
        persnList = getHibernateTemplate().findByCriteria(c);
        System.out.println(persnList.size());

выберите * от лица, где Address.address = "xxxx"; как реализовать это с помощью DetachedCriteria ?

1 Ответ

1 голос
/ 28 ноября 2011
DetachedCriteria c = DetachedCriteria.forClass(Person.class);
    List<Person> persnList =null;

DetachedCriteria addrCrit = c.createCriteria("addresses").addRestriction(Restrictions.eq("address","abcd"));
addrCrit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    persnList = getHibernateTemplate().findByCriteria(c);
    System.out.println(persnList.size());

Создание внутренних критериев по основным критериям, которые будут выполнять эквивалентное внутреннее соединение.

...