JPA通过调用函数添加额外字段
JPA Add extra fields by calling a function
如何在 JPA 查询中添加额外的列?
假设我们有一个 table "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
}
请注意 table
中不存在年龄字段
我想使用
在 JQL 中编写以下查询
entityManager.createQuery(jql)
并通过数据库计算年龄
select u.*, sysdate-u.birthdate age from users
通常我是这样解决这个问题的:
select new name.of.package.users(u.*, sysdate - u.birthdate as age) from users u;
编辑
It leads to ORA-00923: FROM keyword not found where expected My Query
text is : 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
//--------------------------------^^^
可能使用 DB-View 可能会有帮助。您希望实体可更新吗?从一种 "maintenance" 实体派生出一个 "readonly" 实体是否合理,该实体将通过使用数据库视图作为 @Table 来包含计算列?
create view usersview as name, birthdate, sysdate - birthdate as age from users;
实体:
@Entity
@Table("usersview")
public class UserExtended extends User {
如果您不想要两个不同的 Entity-类(即使一个是从另一个派生的),如果 dbms 支持,则需要探索 JPA 如何允许更新视图( oracle 有),我没有这方面的经验,抱歉。
问题解决
查询文本类似于:
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
如何在 JPA 查询中添加额外的列?
假设我们有一个 table "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
}
请注意 table
中不存在年龄字段
我想使用
entityManager.createQuery(jql)
并通过数据库计算年龄
select u.*, sysdate-u.birthdate age from users
通常我是这样解决这个问题的:
select new name.of.package.users(u.*, sysdate - u.birthdate as age) from users u;
编辑
It leads to ORA-00923: FROM keyword not found where expected My Query text is :
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
//--------------------------------^^^
可能使用 DB-View 可能会有帮助。您希望实体可更新吗?从一种 "maintenance" 实体派生出一个 "readonly" 实体是否合理,该实体将通过使用数据库视图作为 @Table 来包含计算列?
create view usersview as name, birthdate, sysdate - birthdate as age from users;
实体:
@Entity
@Table("usersview")
public class UserExtended extends User {
如果您不想要两个不同的 Entity-类(即使一个是从另一个派生的),如果 dbms 支持,则需要探索 JPA 如何允许更新视图( oracle 有),我没有这方面的经验,抱歉。
问题解决
查询文本类似于:
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