我正在尝试将表“用户”映射到名为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。
任何帮助将不胜感激,谢谢。
答案 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
}