SQLResultSetMapping 在空列的情况下抛出异常
SQLResultSetMapping is throwing exception in case of null columns
我有一个值对象,我想为其映射我的本机查询结果集。
我正在使用 @SQLResultSetMapping
映射对象字段,但是当任何列的值为 null
时,抛出异常:
Exception [EclipseLink-6177] (Eclipse Persistence Services - 2.6.1.v20150916-55dc7c3): org.eclipse.persistence.exceptions.QueryException
Exception Description: The column result [custom_properties] was not found in the results of the query.
我的实体Class和映射
@Entity
@Multitenant(MultitenantType.TABLE_PER_TENANT)
@Table(name = "account_master")
@SqlResultSetMapping(name = "DTO_MAPPING", classes = @ConstructorResult(
targetClass = AccountDTO.class,
columns = {@ColumnResult(name = "id"),
@ColumnResult(name = "name"),
@ColumnResult(name = "custom_properties")
})
)
public class Account implements Serializable {
// fields, setters and getters
}
值对象:
public class AccountDTO {
public AssetDTO(){
}
public AssetDTO(int id, String name, String customProperties) {
this.id = id;
this.name = name;
this.customProperties = customProperties;
}
}
以及执行语句
List<AccountDTO> accList = entityManager.createNativeQuery("SELECT id, name, custom_properties FROM account_master WHERE acc_hierarchy <@ 2.3", "DTO_MAPPING").getResultList()
如果 custom_properties(可为空)在查询中被静态值替换,则映射工作得很好。执行有问题吗?由于映射空值似乎是一种常见的情况。
这是作为 EclipseLink 中的错误提交的:https://bugs.eclipse.org/bugs/show_bug.cgi?id=484276
作为解决方法,您可以在
中指定类型
@ColumnResult
注释。
因此您应该将代码更改为:
@Entity
@Multitenant(MultitenantType.TABLE_PER_TENANT)
@Table(name = "account_master")
@SqlResultSetMapping(name = "DTO_MAPPING", classes = @ConstructorResult(
targetClass = AccountDTO.class,
columns = {@ColumnResult(name = "id"),
@ColumnResult(name = "name"),
@ColumnResult(name = "custom_properties", type=String.class)
})
)
public class Account implements Serializable {
// fields, setters and getters
}
我有一个值对象,我想为其映射我的本机查询结果集。
我正在使用 @SQLResultSetMapping
映射对象字段,但是当任何列的值为 null
时,抛出异常:
Exception [EclipseLink-6177] (Eclipse Persistence Services - 2.6.1.v20150916-55dc7c3): org.eclipse.persistence.exceptions.QueryException
Exception Description: The column result [custom_properties] was not found in the results of the query.
我的实体Class和映射
@Entity
@Multitenant(MultitenantType.TABLE_PER_TENANT)
@Table(name = "account_master")
@SqlResultSetMapping(name = "DTO_MAPPING", classes = @ConstructorResult(
targetClass = AccountDTO.class,
columns = {@ColumnResult(name = "id"),
@ColumnResult(name = "name"),
@ColumnResult(name = "custom_properties")
})
)
public class Account implements Serializable {
// fields, setters and getters
}
值对象:
public class AccountDTO {
public AssetDTO(){
}
public AssetDTO(int id, String name, String customProperties) {
this.id = id;
this.name = name;
this.customProperties = customProperties;
}
}
以及执行语句
List<AccountDTO> accList = entityManager.createNativeQuery("SELECT id, name, custom_properties FROM account_master WHERE acc_hierarchy <@ 2.3", "DTO_MAPPING").getResultList()
如果 custom_properties(可为空)在查询中被静态值替换,则映射工作得很好。执行有问题吗?由于映射空值似乎是一种常见的情况。
这是作为 EclipseLink 中的错误提交的:https://bugs.eclipse.org/bugs/show_bug.cgi?id=484276
作为解决方法,您可以在
中指定类型@ColumnResult
注释。
因此您应该将代码更改为:
@Entity
@Multitenant(MultitenantType.TABLE_PER_TENANT)
@Table(name = "account_master")
@SqlResultSetMapping(name = "DTO_MAPPING", classes = @ConstructorResult(
targetClass = AccountDTO.class,
columns = {@ColumnResult(name = "id"),
@ColumnResult(name = "name"),
@ColumnResult(name = "custom_properties", type=String.class)
})
)
public class Account implements Serializable {
// fields, setters and getters
}