Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn được đặt tên ở chế độ ngủ đông - tham gia 3 bảng

@NamedQuery

Tôi đã tạo @NamedQuery sau trên Organization lớp thực thể.

@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 { ...

(Tôi đã sử dụng chú thích JPA tiêu chuẩn, nhưng trình cung cấp của tôi là Hibernate.)

Kiểm tra

Đây là bài kiểm tra tôi đã chạy.

EntityManager em = ...
TypedQuery<Organization> q = em.createNamedQuery("query", Organization.class);
q.setParameter("uId", 1); // try it with 1L if Hibernate barks about it
for (Organization o : q.getResultList())
  System.out.println(o.name);

Sử dụng các bảng và dữ liệu mẫu bên dưới, kết quả này sẽ xuất ra

A
B

Vui lòng xem nó có phù hợp với bạn không.

Bảng

CREATE TABLE `organization` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` varchar(255) COLLATE utf8_unicode_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`);

(Tôi đã sử dụng một chút khác với của bạn , nhưng nó không quá quan trọng.)

Dữ liệu mẫu

`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 |
+---------+---------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thủ tục lưu trữ MYSQL cho các biến cập nhật là 0

  2. Câu lệnh chuẩn bị multi_query trong PHP MySQLi

  3. Chỉ mục băm MySQL để tối ưu hóa

  4. Cách triển khai Percona XtraDB Cluster 8 để có tính khả dụng cao

  5. Sự cố UTF8 MySQL trên Rails - sự cố mã hóa với utf8_general_ci