如何在JPA查询中添加额外的列?
假设我们有一个通过以下伪代码创建的表“users”:
create table users(name,birthdate);
用户jpa实体是这样的:
@Entity
@Table("users")
public class User {
@Basic
@Column
private String name;
@Basic
@Column
private Date birthDate;
@Transient
private int age;
//getters and setters are here
}
请注意,表格中没有“年龄”字段 我想使用
在JQL中编写以下查询entityManager.createQuery(jql)
并计算数据库的年龄
select u.*, sysdate-u.birthdate age from users
答案 0 :(得分:0)
我可以用这种方式解决这个问题:
select new name.of.package.users(u.*, sysdate - u.birthdate as age) from users u;
修改强>
导致ORA-00923:FROM关键字找不到预期的My Query 文字是:
String jql = "select new entity.User(u.*, sysdate-u.birthdate as age) from User u";
查询包含错误:
select new entity.User(u.*, sysdate-u.birthdate as age) from User u
//--------------------------------^^^
答案 1 :(得分:0)
可能使用DB-View可能有所帮助。您希望实体可更新吗?从一种“维护”实体派生的“只读”实体是否合理?通过将数据库视图用作@Table来包含计算列?
create view usersview as name, birthdate, sysdate - birthdate as age from users;
实体:
@Entity
@Table("usersview")
public class UserExtended extends User {
如果你不想要两个不同的Entity-Classes(即使一个派生自另一个),那么JPA如何允许更新视图,如果dbms支持它(oracle确实如此),我需要进行一些探索。没有经验,对不起。
答案 2 :(得分:0)
问题解决了。
查询文本如下:
String jql = "select NEW entity.User(u.id, u.name, u.birthDate, sysdate-u.birthDate as age) from User u";
并且还将适当的构造函数添加到实体
public User(int id, String name, Date birthDate, double age) {
this.id = id;
this.name = name;
this.birthDate = birthDate;
this.age = age;
}
并使用entitymanaget.createQuery(jql)而不是createNativeQuery