SpringDataForCassandra:在DB

时间:2018-10-24 13:01:11

标签: scala spring-boot cassandra spring-data

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

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

这是我的UserRepository特性,Entity对象和Controller。
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列。
2.如果arg中的值为null,则将CreatedBy的setter修改为-1。
任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:2)

如果您尝试使用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
}