【发布时间】:2015-12-15 12:14:17
【问题描述】:
如果有限制/预测条件。
我正在以这种方式使用 pojo(for table Student),
class student
{
@Id
@Column(name = "SSN", unique = true, nullable = false)
private String SSN;
@Column(name = "Badge")
private String Badge;
@Column(name = "Color")
private String Color;
@Formula(value = " concat(Badge, '', Color) ")
private String BadgeColor;
//getters and setters.
}
学生表中这些列的数据是这样的,
ssn badge color
=== ==== ======
118 LB 22
117 GAAG 33
我正在以这种方式使用投影从表中获取 criteria.list(),
// setup projections for column selection
Criteria cr = session.createCriteria(Student.class);
List<String> requestedColumns=[ssn,badge,color];
if (requestedColumns != null && requestedColumns.size() > 0) {
ProjectionList pl = Projections.projectionList();
for (String column : requestedColumns) {
pl.add(Projections.property(column));
}
cr.setProjection(pl);
}
return cr.list();
所以,我是这样得到输出的,
[[118, LB, 22]//[SSN,BADGE,Color]
[117, GAAG, 33]//[SSN,BADGE,Color]
没关系。但我想要的是,我想连接徽章和颜色并显示它。
这就是我在上面显示的 pojo 中添加@Formula 的原因。
然后,我以这种方式将徽章颜色列添加到投影列表中,
List<String> requestedColumns=null;
if (requestedColumns != null && requestedColumns.size() > 0) {
ProjectionList pl = Projections.projectionList();
for (String column : requestedColumns) {
if(column.equalsIgnoreCase("Badge"))
{
pl.add(Projections.property("BadgeColor"));
}
else
pl.add(Projections.property(column));
}
cr.setProjection(pl);
}
现在我通过这种方式获取数据,
[[118, LB22, 22]//[SSN,BadgeColor,Color]
**[117, null, 33]//[SSN,BadgeColor,Color]**
问题是,如果 BadgeColor==null 如上所述,那么我需要在那里自己获取徽章数据。
即,预期的输出是,
[[118, LB22, 22]//[SSN,BadgeColor,Color]
**[117, GAAG, 33]//[SSN,badge,Color]**//
我尝试在添加到投影列表时以这种方式添加限制ISNOTNULL,
if(column.equalsIgnoreCase("Badge"))
{
**cr.add(Restrictions.isNotNull("BadgeColor"));**
pl.add(Projections.property("BadgeColor"));
}
else
pl.add(Projections.property(column));
但它会从列表中完全删除所有带有 BadgeColor=null 值的行。所以我只是作为输出记录在案。
[[118, LB22, 22]//[SSN,BadgeColor,Color]
谁能帮我解决这个问题?
我想要的是,
If this formula calculated BadgeColor column value != null - add BadgeColor property to projection.
else if formula calculated BadgeColor column value == null - then add badge property to projection.
请帮忙..
【问题讨论】:
标签: hibernate formula criteria projection notnull