@NamedQuery
我
@NamedQuery在
Organization实体类上创建了以下内容。
@NamedQuery(name = "query", query = "SELECt DISTINCT o " + "FROM Organization o, User u " + "JOIN o.roles oRole " + "JOIN u.roles uRole " + "WHERe oRole.id = uRole.id AND u.id = :uId")public class Organization { ...(我使用了标准的JPA批注,但我的提供程序是Hibernate。)
测试
这是我进行的测试。
EntityManager em = ...TypedQuery<Organization> q = em.createNamedQuery("query", Organization.class);q.setParameter("uId", 1); // try it with 1L if Hibernate barks about itfor (Organization o : q.getResultList()) System.out.println(o.name);使用下面的表和样本数据,此输出
AB
请查看它是否适合您。
桌子
CREATE TABLE `organization` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unipre_ci DEFAULT NULL, PRIMARY KEY (`id`));CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unipre_ci DEFAULT NULL, `description` varchar(255) COLLATE utf8_unipre_ci DEFAULT NULL, `organization_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`));CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`));CREATE TABLE `user_has_role` ( `user_id` int(11) NOT NULL DEFAULT '0', `role_id` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`user_id`,`role_id`));ALTER TABLE `role` ADD ConSTRAINT `cst_organization_id` FOREIGN KEY `fk_organiztaion_id` (`organization_id`) REFERENCES `organization` (`id`);
(我使用的方法与 您 使用的方法有所不同,但这没关系。)
样本数据
`organization`+----+------+| id | name |+----+------+| 1 | A || 2 | B |+----+------+`role`+----+------+-------------+-----------------+| id | name | description | organization_id |+----+------+-------------+-----------------+| 1 | A | a| 1 || 2 | B | b| 1 || 3 | C | c| 2 |+----+------+-------------+-----------------+`user`+----+| id |+----+| 1 || 2 || 3 |+----+`user_has_role`+---------+---------+| user_id | role_id |+---------+---------+| 1 | 1 || 1 | 2 || 1 | 3 || 2 | 1 || 3 | 1 || 3 | 3 |+---------+---------+



