SpringDataForCassandra:当数据库中的 Int 列设置为空时,实体中的 NullPointerEx

Posted

技术标签:

【中文标题】SpringDataForCassandra:当数据库中的 Int 列设置为空时,实体中的 NullPointerEx【英文标题】:SpringDataForCassandra: NullPointerEx in Entity when an Int column is set null in DB 【发布时间】:2019-03-28 21:52:34 【问题描述】:

我正在尝试将我的表“用户”映射到一个名为 UserEntitiy 的 scala 域对象。

User 表中名为 CreatedBy 的 Int 列具有空值,在调用 userRepository.findOne() 或 .findAll() 时,我遇到了 NullPointerException。 将 Int 列的值更新为任何有效的 Int 即可解决此问题。但是,在我们的用例中,如果没有可用值,我们需要在某些 int 列中保留空值。

这是我的 UserRepository 特征、实体对象和控制器。 UserRepository.scala

import org.springframework.data.repository.CrudRepository
import org.springframework.stereotype.Repository

@Repository
trait UserRespository extends CrudRepository[UserEntity, Int] 

UserEntity.scala

import java.util.Date
import org.springframework.data.cassandra.core.cql.PrimaryKeyType
import org.springframework.data.cassandra.core.mapping.PrimaryKey, 
PrimaryKeyColumn, Table

@Table(value="User")
class UserEntity extends Serializable 
    @PrimaryKey
    var userID: Int = _
    @PrimaryKeyColumn(`type` = PrimaryKeyType.CLUSTERED)
    var enterpriseID: Int = _
    var createdBy: Int = _

CoreController.scala

@RestController
@RequestMapping(path = Array("/hello"))
@ResponseBody
class CoreController 
    @Autowired
    var userRepository : UserRespository = null
    @GetMapping(Array("/"))
    def getUser(): ResponseBody = 
       var a:UserEntity  = userRepository.findById(4000).get() //NPE Here.
       null
    

我尝试过的: 1. 对 createdBy 列使用 Options 数据类型。 2. 修改 CreatedBy 的设置器,如果 arg 中的值为 null,则设置为 -1。 任何帮助将不胜感激,谢谢。

【问题讨论】:

我已经删除了java标签,因为这个问题中没有Java。 【参考方案1】:

如果您尝试过使用 Option 数据类型,那么我强烈建议您使用 Try 来以函数式方式处理错误

你可以重写你的代码如下

import scala.util.Try

val res : Option[UserEntity] = Try
  userRepository.findById(4000).get()
 match
  case scala.util.Success(value) => Some(value)
  case scala.util.Failure(exception) => None

【讨论】:

以上是关于SpringDataForCassandra:当数据库中的 Int 列设置为空时,实体中的 NullPointerEx的主要内容,如果未能解决你的问题,请参考以下文章

算法基础之冒泡排序

大量数据(几亿)里筛素数

Java 多线程的非确定性行为

大数加法

Qt移植

websocket 快速上手