在下面的代码中.. 有两个别名作为Entity Object 参考。有时"caseStage" as stage可以null在数据库中。当"caseStage"为空时,我希望stage.name值为空String或诸如此类的自定义值"---"。
session.createCriteria(CaseMasterPO.class)
.createAlias("branch", "br") // BranchPO.class
.createAlias("caseStage", "stage") // CaseStagePO.class
.setProjection(Projections.projectionList()
.add(Projections.property("caseCode"))
.add(Projections.property("br.zoneCode"))
.add(Projections.property("stage.name")) // Problem, when stage == null
)
.add(Restrictions.eq("caseCode", caseCode)).uniqueResult();
Run Code Online (Sandbox Code Playgroud) 我是hibernate ORM的初学者.我找到了一个类Example(org.hibernate.criterion.Example).我搜索过很多关于同一个课程的内容,但我找不到真正的用途或任何好的例子.Hibernate文档没有为我提供足够的信息来理解这个类.
如果任何人能够提供一个最好的例子并解释Example类的用途,那将是很好的
提前致谢
我需要过滤对象列表中的实体,例如:
public class Student {
private int id;
private List<Course> courses;
}
public class Course {
private int id;
private String name;
private float note;
private Classroom classroom;
}
public class Classroom {
private int id;
private String classroom;
}
Run Code Online (Sandbox Code Playgroud)
如何获得一个包含笔记大于 70 且位于教室 23(例如)的课程列表的学生对象?
有没有办法使用实体的名称而不是数据库的列之一?
或者我如何将 hibernate 为实体生成的别名与 sql 相关联?
我附上了一个来自休眠过滤器的链接:https : //docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch19.html
java hibernate hibernate-mapping hibernate-criteria hibernate-filters
我的表结构如下:
有人可以帮助处理以下条件查询:
Criteria c = getSession().createCriteria(getEntity(), "b");
c.add(Restrictions.in("b.isTwitterVerified", 1));
or // b.isFbVerified =1// something like this
return c.list();
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建规范来为以下查询谓词子查询。选择 u.* from User u where u.login in(选择 ur.role_id from userRoles ur where ur.role_Id = roleId)。
到目前为止,这是我构建的部分
public static Specification<User> userRoleId(String roleId) {
return new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
//return builder.equal(root.<LocalDate> get("scheduledDisbursementDate"), scheduledDisbursementDate);
Subquery<UserRole> subquery = query.subquery(UserRole.class);
Root<UserRole> subqueryRoot = subquery.from(UserRole.class);
subquery.select(subqueryRoot);
Predicate roleIdList = builder.equal(subqueryRoot.get("roleId"), roleId);
subquery.select(subqueryRoot).where(roleIdList);
return builder.exists(subquery);
}
};
}
Run Code Online (Sandbox Code Playgroud)
你能帮我把子查询与主查询联系起来吗?
注意:实体类中没有定义连接。一切都应该只通过子查询来完成
我正在尝试编写一个相当于以下 SQL 查询的 Hibernate Criteria API:
select c.NAME as carName,
cc.COLOR_CODE as colorCode,
cc.COLOR as color,
c.DESCRIPTION as desc,
c.MANUFACTURE_YEAR as year
from CAR c
LEFT JOIN CAR_COLOR CC on c.COLOR_CODE_ID = CC.ID
WHERE CC.COLOR_CODE = ?
Run Code Online (Sandbox Code Playgroud)
这是我的Car实体
public class Car extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Basic
@Column(name = "MANUFACTURE_YEAR")
private String year;
@Basic
@Column(name = "DESCRIPTION")
private String desc;
private Long colorCodeId;
private String manufacturer;
}
Run Code Online (Sandbox Code Playgroud)
这是我的CarColor实体 …
从第二次调用开始出现以下异常。我们正在使用 hibernate 5.6.6.Final
"message": "参数值 [\] 与预期类型 [java.lang.String (n/a)] 不匹配;嵌套异常为 java.lang.IllegalArgumentException:参数值 [\] 与预期类型 [java.lang.IllegalArgumentException] 不匹配。 lang.String(不适用)]",
我有
Class A{
List <B> bList
}
Class B {
String name;
}
Run Code Online (Sandbox Code Playgroud)
现在我想用Hibrnate标准API编写查询,这样我只得到一个带有过滤的bList属性的pojo,只有B pojo的
where "b.name" == 'abc'
Run Code Online (Sandbox Code Playgroud) 我正在我的项目中使用Hibernate Criteria API.在此API中,list()方法用于从db获取大量记录.我的问题是:如何从db中只获取一条记录(不使用list()方法,因为没有必要)?
我正在使用条件和谓词从数据库中获取结果,并且得到了结果列表,并且我试图应用分页和排序,但是它不起作用。请在缺少的地方帮我,这是我的代码:
private Page<Books> getFiltereBooks(Params params,
PageRequest sortOrder) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Books> criteria = builder.createQuery(Books.class);
Root<Books> booksRoot = criteria.from(Books.class);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(builder.equal(booksRoot.get("id"), params.getRequestId()));
predicates.add(builder.like(builder.lower(booksRoot.get("name")),
"%" + params.getName().toLowerCase() + "%"));
criteria.where(builder.and(predicates.toArray( new Predicate[predicates.size()])));
criteria.orderBy(builder.desc(booksRoot.get("id")));
List<Books> result = em.createQuery(criteria).getResultList();
int total = result.size();
Page<Books> result1 = new PageImpl<>(result, sortOrder, total);
return result1;
}
Run Code Online (Sandbox Code Playgroud)
当我使用此代码时:
Page<Books> result1 = new PageImpl<>(result, sortOrder, total);
Run Code Online (Sandbox Code Playgroud)
它不起作用,我想返回一个页面对象。任何帮助表示赞赏。
在:https : //stackoverflow.com/a/11138229/1270045 中提出的解决方案 在 java 中工作得很好,但我在 kotlin 中。在这里我如何将谓词数组传递给用 kotlin 编写的标准构建器?
所以它是关于在 kotlin 中写这个我可以传递的:
cq.select(customer).where(predicates.toArray(new Predicate[]{}));
Run Code Online (Sandbox Code Playgroud)
我的示例代码:
val predicates = mutableListOf<Predicate>()
if (XYZ != null) {
val XYZPath = element.get<Long>("XYZ")
predicates.add(criteriaBuilder.equal(XYZPath, XYZ))
}
criteriaQuery.select(element)
.where(criteriaBuilder.or(???))
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码进行排序:
undoneCategories = session.createCriteria(Category.class);
undoneCategories.add(Restrictions.eq("Done", false));
undoneCategories.addOrder(Order.asc("UpwardGenerator"));
undoneCategories.setMaxResults(1);
Run Code Online (Sandbox Code Playgroud)
哪里UpwardGenerator是boolean.
它将如何排序?有false第一个?还是true第一个?