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的主要内容,如果未能解决你的问题,请参考以下文章