我想使用JPA 2.0 CriteriaBuilder创建以下SQL查询:
SELECT * FROM PROFIL WHERE PROFILID IN (SELECT PROFILID FROM ROLEPROFIL WHERE ROLEID = roleId)
以下是我的课程:
Profil:
public class Profil extends AbstractDomain<Long> {
@Id
@Column
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgen_x")
@UiInfo(name = "Identifiant")
private Long profilId;
@Column(nullable = false)
@UiInfo(name = "Libellé")
private String lib;
}
角色:
public class Role extends AbstractDomain<Long> {
@Id
@Column
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgen_x")
@UiInfo(name = "Identifiant")
private Long roleId;
}
角色简介:
public class RoleProfil extends AbstractDomain<Long> {
@Id
@Column
@UiInfo(name = "Identifiant")
private Long roleProfilId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(nullable = false)
@UiInfo(name = "Profil")
private Profil profilId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(nullable = false)
@UiInfo(name = "Rôle")
private Role roleId;
}
我想做的是创建一个函数,使用JPA通过角色
ID获取Profils
。
这是我开始做的,但我对JPA是新手,我不知道该怎么做:
public List<Profil> findProfilsByRoleId(Long roleId) {
final CriteriaBuilder builder = getCriteriaBuilder();
final CriteriaQuery<Profil> criteriaQuery = builder.createQuery(Profil.class);
final Root<Profil> from = criteriaQuery.from(Profil.class);
//TODO
TypedQuery<Profil> query = getEntityManager().createQuery(criteriaQuery);
return query.getResultList();
}
我该怎么做?
SELECT PF.*
FROM PROFIL AS PF
INNER JOIN ROLEPROFIL AS RPF
ON RPF.PROFILID = PF.PROFILID
WHERE RPF.ROLEID = {roleId}
可能是一个更容易实现的查询。我认为java中的代码可能是这样的(我没有测试过只是提出的解决方案):
public List<Profil> findProfilsByRoleId(Long roleId) {
final CriteriaBuilder builder = getCriteriaBuilder();
final CriteriaQuery<Profil> query = builder.createQuery(Profil.class);
final Root<RoleProfil> from = query.from(RoleProfil.class);
query.select(from.get(RoleProfil_.profilId));
query.where(builder.equal(from.get(RoleProfil_.roleId).get(Role_.roleId), roleId));
final TypedQuery<Profil> typedQuery = getEntityManager().createQuery(query);
return typedQuery.getResultList();
}
问题内容: 我正在尝试从以下查询中获取行数。我只得到行计数为1,但有35条记录。您能否让我知道如何从内部查询中获取计数? 谢谢 问题答案: 您缺少FROM,需要为子查询指定别名。
我正在尝试从一个select表单中获取一个时间值。我在代码中看不到任何错误,尝试更改所有类名和变量,但值仍然没有被get select。(提交表单后我看不到所选的值) 代码添加如下:
SQL可能如下所示: 如何将said SQL转换为querydsl? 编辑:因为它受到混淆:是的,这个例子是愚蠢的。不,我不想“优化”SQL。我所需要的只是一些生成完全相同(愚蠢的)SQL的QueryDSL代码。或者任何其他查询DSL代码生成任何类型的。如果可能的话。
问题内容: 在查看查询日志时,我看到一个没有解释的奇怪模式。 在几乎每个查询之后,我都有“从DUAL中选择1”。 我不知道这是从哪里来的,而且我当然没有明确地进行查询。 日志基本上如下所示: 有人遇到过这个问题吗? MySQL版本:5.0.51 驱动程序:使用JDBC的Java 6应用程序。mysql-connector-java-5.1.6-bin.jar 连接池:commons-dbcp 1.
下面是我得到的错误。 下面是HTML DOM
问题内容: 尝试在angularjs中选择关于对象值的多个选项 这是一个代码: 和html jsfiddle上的(非)工作示例 http://jsfiddle.net/andrejkaurin/h9fgK/ 问题答案: 您尝试使用选择倍数(如复选框列表),这有点奇怪。多选输出一个数组。您不能将ng- model放在这样的选项标签上,而是放在选择本身上。因此,由于select将输出值数组,因此您需要