DAO 如何映射 SQL 函数返回的字段?
DAO How to map a field returned by SQL function?
我正在为我的 API 使用 dropwizard 框架。我有一个命名查询如下:
@NamedQuery(name = "com.myapp.entity.MyEntity.findByMatchId", query = "SELECT test.name, count(test) as count FROM MyEntity as test,Entity1 as d where test.drug=d.id and test.drug.id= :drugId group by test.name") })
我正在返回 count(test)
函数的结果作为名称 count
。下面是我的实体 class :
@NamedQuery(name = "com.myapp.entity.MyEntity.findByMatchId", query = "SELECT test.name, count(test) as count FROM MyEntity as test,Entity1 as d where test.drug=d.id and test.drug.id= :drugId group by test.name") })
@Entity
@Table(name = "my_entity")
@NamedQueries({
@NamedQuery(name = "com.myapp.entity.MyEntity.findByMatchId", query = "SELECT test.name, count(test) as count FROM MyEntity as test,Entity1 as d where test.drug=d.id and test.drug.id= :drugId group by test.name") }))
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@JsonBackReference("drug_id")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "drug_id", nullable = false)
private Drug drug;
@Column(name = "timestamp", nullable = false)
private Date timestamp;
// This value is not getting mapped
private Long count;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Drug getDrug() {
return drug;
}
public void setDrug(Drug drug) {
this.drug = drug;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public SideEffectSeverity getSideEffectSeverity() {
return sideEffectSeverity;
}
public void setSideEffectSeverity(SideEffectSeverity sideEffectSeverity) {
this.sideEffectSeverity = sideEffectSeverity;
}
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
}
这里要怎么做才能正确映射count函数的值作为count。
为什么我的映射没有正确发生,我必须给它一些注释吗?
以上查询得到结果了吗?
如果是,请注意 return 类型的 count() 函数会很长。所以希望你已经尝试过用 DTO 映射响应(它应该包含两个字段作为名称和计数)。
您使用的是 OracleSQL 还是 POSTgreSQL?
Count 是一个保留字,重命名您的列将解决这个问题
@Column(name = "count1")
private Long count;
我正在为我的 API 使用 dropwizard 框架。我有一个命名查询如下:
@NamedQuery(name = "com.myapp.entity.MyEntity.findByMatchId", query = "SELECT test.name, count(test) as count FROM MyEntity as test,Entity1 as d where test.drug=d.id and test.drug.id= :drugId group by test.name") })
我正在返回 count(test)
函数的结果作为名称 count
。下面是我的实体 class :
@NamedQuery(name = "com.myapp.entity.MyEntity.findByMatchId", query = "SELECT test.name, count(test) as count FROM MyEntity as test,Entity1 as d where test.drug=d.id and test.drug.id= :drugId group by test.name") })
@Entity
@Table(name = "my_entity")
@NamedQueries({
@NamedQuery(name = "com.myapp.entity.MyEntity.findByMatchId", query = "SELECT test.name, count(test) as count FROM MyEntity as test,Entity1 as d where test.drug=d.id and test.drug.id= :drugId group by test.name") }))
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@JsonBackReference("drug_id")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "drug_id", nullable = false)
private Drug drug;
@Column(name = "timestamp", nullable = false)
private Date timestamp;
// This value is not getting mapped
private Long count;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Drug getDrug() {
return drug;
}
public void setDrug(Drug drug) {
this.drug = drug;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public SideEffectSeverity getSideEffectSeverity() {
return sideEffectSeverity;
}
public void setSideEffectSeverity(SideEffectSeverity sideEffectSeverity) {
this.sideEffectSeverity = sideEffectSeverity;
}
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
}
这里要怎么做才能正确映射count函数的值作为count。
为什么我的映射没有正确发生,我必须给它一些注释吗?
以上查询得到结果了吗?
如果是,请注意 return 类型的 count() 函数会很长。所以希望你已经尝试过用 DTO 映射响应(它应该包含两个字段作为名称和计数)。
您使用的是 OracleSQL 还是 POSTgreSQL?
Count 是一个保留字,重命名您的列将解决这个问题
@Column(name = "count1")
private Long count;