2016-10-07 8 views
2

В настоящее время я работаю с Criteria API Hibernate и я получил следующую ситуацию:Hibernate Критерии несколько таблиц

@Entity(name = "A") 
private class A { 
    @Id 
    @GenericGenerator(name = "fileEntryIdGenerator", strategy = "increment") 
    @GeneratedValue(generator = "fileEntryIdGenerator") 
    @Column(name = "DBID") 
    private Long id; 

    @Column 
    private String name; 
    @OneToMany(targetEntity = B.class, cascade = {CascadeType.ALL }, fetch = FetchType.LAZY) @JoinColumn(name = "A_id") 
    private Set<B> references; 
    // .... 
} 

@Entity(name = "B") private class B{ 
@Id 
@GenericGenerator(name = "fileEntryIdGenerator", strategy = "increment") 
@GeneratedValue(generator = "fileEntryIdGenerator") 
@Column(name = "DBID") 
private Long id; @Column private String name;...} 

Теперь, мой план, чтобы получить список всех B, где A.name = «АСМАП» , Поэтому мне нужен запрос критериев.

Может кто-нибудь, пожалуйста, помогите мне ?!

+0

http://stackoverflow.com/questions/720502/hibernate-criteria-joining-table-without-a-mapped-association – sina

+0

Я думаю, что это не то же самое. создатель потока пытается получить все A, где B.name = lala. Я хочу, чтобы все буквы B находились там, где A.name = lala. – Phi

ответ

1

Надеюсь, вы пытаетесь присоединиться к двум таблицам, используя критерии API. Пожалуйста, ознакомьтесь с приведенным ниже кодом.

Criteria criteria = session.createCriteria(B.class, "B"); 
criteria.createAlias("B.A", "A", JoinType.INNER_JOIN); 
criteria.add(Restrictions.eq("A.name", "name")); 
criteria.list(); 

В приведенном выше коде,

первая линия - Критерии объект создается для класса B.

второй линии - B соединяется с A на основе столбца отображения

3-я линия. Ограничение производится на основе столбца «Название» в A.

4-я линия. Критерии выполняются для получения списка

Также я думаю, что может быть отображение класса A в классе B (много к одному).

+0

выглядит очень хорошо, но я получаю это исключение: не удалось разрешить свойство: A из B – Phi

+0

Думаю, вам нужно добавить класс A в качестве поля в классе B с аннотацией «Много к одному». – Sibi

+0

если возможно, я хотел бы избежать этого дополнительного отношения – Phi