многие получают критерии - PullRequest
1 голос
/ 27 ноября 2011

У меня есть отношение @manytomany в спящем режиме Подобно : Стол Сотрудника

public class Employee implements Serializable {
    @ManyToMany(fetch = FetchType.EAGER)
    @Fetch(FetchMode.SELECT)
    @JoinTable(name = "employee_role", joinColumns = { @JoinColumn(name = "employee_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") })
    private Set<Role> roles = new HashSet<Role>(0);
}

Роль таблицы:

public class Role implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "role_id", unique = true, nullable = false)
    @Basic(fetch = FetchType.EAGER)
    private long id;
}

как получить всех сотрудников, когда роль имеет конкретное значение, по Критерию гибернации или подзапрос

Ответы [ 2 ]

3 голосов
/ 27 ноября 2011

Если я правильно понимаю, вы хотите, чтобы все сотрудники имели конкретную роль. Зачем использовать Criteria API для этого. HQL намного проще и удобочитаемее:

select e from Employee e inner join e.roles role where role.id = :roleId

Если вы действительно хотите использовать Criteria API, вот оно:

Criteria c = session.createCriteria(Employee.class, "employee");
c.createAlias("employee.roles", "role");
c.add(Restrictions.eq("role.id", roleId));
List<Employee> employeed = c.list();
0 голосов
/ 28 ноября 2011

Попробуйте ответ JB Nizet и вернуть несколько строк, не совпадающих с номером в таблице, решение состоит в том, чтобы добавить setResultTransformer (Criteria.DISTINCT_ROOT_ENTITY)

Criteria c = getCurrentSession().createCriteria(Employee.class,"employee");
c.createAlias("employee.roles", "role");
c.add(Restrictions.eq("role.id", id));
List<Employee> employeed = c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...