如果条件有限制/预测,怎么办??
我有这样的pojo(对于表学生),
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]
这没关系。但我想要的是,我想要连续徽章和颜色并展示它。
这就是我将@Formula添加到上面显示的pojo中的原因。
然后,我以这种方式将badgecolor列添加到投影列表中,
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.
请帮助..
答案 0 :(得分:0)
您必须将空值字符串转换为空值,并将其包装在COALESCE中。
将公式代码更改为:
clock_gettime()