Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

हाइबरनेट नामांकित क्वेरी - 3 टेबल में शामिल हों

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

(मैंने मानक जेपीए एनोटेशन का उपयोग किया था, लेकिन मेरा प्रदाता हाइबरनेट था।)

परीक्षा

यह वह परीक्षा है जिसे मैंने चलाया था।

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

नीचे दी गई तालिकाओं और नमूना डेटा का उपयोग करके, यह आउटपुट करता है

A
B

कृपया देखें कि क्या यह आपके लिए काम करता है।

टेबल्स

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`);

<उप>(मैंने आपके से थोड़ा अलग उपयोग किया है , लेकिन यह बहुत ज्यादा मायने नहीं रखता।)

नमूना डेटा

`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. MYSQL यदि लेन-देन में कथन त्रुटि उत्पन्न कर रहा है

  2. अनुक्रमण का उपयोग करके MYSQL डेटाबेस अनुकूलन

  3. MySQL (InnoDB) में सबसे अच्छी मिलान पंक्ति खोजें

  4. शामिल होने के साथ पारस्परिक मित्र sql (Mysql)

  5. त्रुटि #2002 सॉकेट के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता '/Applications/MAMP/tmp/mysql/mysql.sock' (2)