eclipseLink多租户错误:未添加租户ID

时间:2016-06-16 21:46:58

标签: eclipselink multi-tenant

eclipseLink多租户错误:未添加租户ID。我尝试了2.5.1和2.6.1。

例如,

学生和课程:ManyToMany。

Student     Course                        Student_Course
-------     ------------------            -----------------
id, name    id, name, tenantId           studentId, courseId


 public class Student {

        @ManyToMany(...)
        List<Course> getCourses() {
            ...
        }
    } 

课程已启用多租户,但学生不是。

搜索学生左连接课程:生成的SQL:

    SELECT DISTINCT t1.ID AS a1, t1.NAME AS a2, t1.VERSION AS a3, t0.ID AS a4, 
t0.tenantId AS a5, t0.NAME AS a6, t0.VERSION AS a7 FROM Student t1 LEFT OUTER 
JOIN (Student_Course t2 JOIN Course t0 ON (t0.ID = t2.courseId)) ON 
(t2.studentId = t1.ID) ORDER BY t1.ID DESC 

对Course.tenantId的限制不会添加到查询中。

<entity class="Course" > 
    <multitenant>
        <tenant-discriminator-column name="tenantId" context-property="tenant.id"
            discriminator-type="INTEGER"/>      
    </multitenant>  
</entity> 



EntityManager em = ..
em.setProperty("tenant.id", 1);

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Student> criteriaQuery = criteriaBuilder.createQuery(Student.class);
Root<Student> root = criteriaQuery.from(Student.class);
root.fetch("courses", JoinType.LEFT);

criteriaQuery.distinct(true);
TypedQuery<Student> query = em.createQuery(criteriaQuery);
List<Student> students = query.getResultList();

检索到的学生的课程将包含所有租户的学生的所有课程。但只需要租户1的课程。

有没有解决方法?感谢。

1 个答案:

答案 0 :(得分:1)

似乎有一个错误 Bug 345962 - Join fetch query when using tenant discriminator column fails.

已在 javax.persistence 的2.2.1版中解决,可以在org.eclipse.persistence版本2.7.3中找到

mvn javax.persistence