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的课程。
有没有解决方法?感谢。
答案 0 :(得分:1)
似乎有一个错误 Bug 345962 - Join fetch query when using tenant discriminator column fails.
已在 javax.persistence 的2.2.1版中解决,可以在org.eclipse.persistence 的版本2.7.3中找到