spring 如果列值为null,如何为列变量分配默认值

68bkxrlz  于 2023-08-02  发布在  Spring
关注(0)|答案(3)|浏览(101)

嗨,我想分配默认值列变量,如果值从选择查询该变量是未来为空。

@Entity
    @Table(name = "CDP_ALERTS")
    public class Country {

       @Column(name = "alert_reported_time")
    private String alertReportedTime;

    @Column(name = "unique_id")
    private String uniqueTrxId;

    @Column(name = "status_data")
    private String status;

public String getAlertReportedTime() {
        return alertReportedTime;
    }

    public void setAlertReportedTime(String alertReportedTime) {
        this.alertReportedTime = alertReportedTime;
    }
public String getUniqueTrxId() {
        return uniqueTrxId;
    }

    public void setUniqueTrxId(String uniqueTrxId) {
        this.uniqueTrxId = uniqueTrxId;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
    }

字符串
这里的status_data列值有时会变为null。下面是选择查询。

@Query( "SELECT a FROM Country a WHERE to_char(alert_reported_time,'DD-MM-YY')=to_char(current_date,'DD-MM-YY') order by alert_reported_time desc")
    List<Country> findCountryByDate();


下面是一个输出,其中一个对象的状态值为关闭,但另一个对象的状态值为null。
{

[
        "alertSubject": "CWDigital Alert in MS onlinepayment with StatusCode 400",
        "alertReportedTime": "2020-05-29 15:16:03",
        "uniqueTrxId": "1018",
        "status": null,
        "reason": null,
        "conversationId": "ecd6184d-b2f1-4545-c5f2-1ac6d1df48fc",
        "clusterName": "patlacw01",
        "statusCode": "400\n",
        "nameSpace": "com-att-cwdigital-shop-prod"
    },
    {
        "alertSubject": "CWPOS Alert-500 in mS OrderManagement from pbhmacw01 and m26845@prod.shop.cwdigital.att.com",
        "alertReportedTime": "2020-05-29 15:15:41",
        "uniqueTrxId": "1017",
        "status": "CLOSED",
        "reason": null,
        "conversationId": "ee66359e-f87d-4eff-ce50-02ff6e18879a",
        "clusterName": "pbhmacw01",
        "statusCode": "500\n",
        "nameSpace": "com-att-cwpos-prod"
    }]

5cg8jx4n

5cg8jx4n1#

您可以更改属性的getter方法。

public String getStatus(){
   if(status != null) return status;
   return "Whatever you want";
}

字符串
另外,如果你想在数据库中保存默认值。可以在属性中设置默认值。

@Column
private String status = "My default value";

ppcbkaq5

ppcbkaq52#

您需要设置nativeQuery = true,并使用一些SQL方法在select query中使用每个列,如果该列具有null值,则返回预期值。就像在H2中你可以使用IFNULL(column,expectedvalue),在oracle中你可以使用nvl(column,expectedValue)。
示例:
String query =“从CDP_ALERTS中选择alertReportedTime,uniqueTrxId,IFNULL(status,'defaultvalue')作为状态”;
@Query(value = query,nativeQuery = true)
List <Country> findCountryByDate();

3okqufwl

3okqufwl3#

如果要向现有表中添加新列,则可以使用JPA注解来设置默认值。这是非常有用的,特别是如果列上有@Id注解。这将在表的每一行上设置默认值“SectionInput”而不是null。这是非常有效和超级快。

@Id
@Column(columnDefinition = "varchar(255) default 'SectionInput'")
protected String inputSource;

字符串
在我的例子中,这个新列被添加到现有的复合键中,这就是为什么我在它上面有@Id注解。

相关问题