SpringDataForCassandra: NullPointerEx в Entity, когда столбец Int имеет нулевое значение в БД - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь сопоставить свою таблицу User с объектом домена scala, который называется UserEntitiy.

Столбец Int с именем CreatedBy в таблице User имеет нулевые значения, при вызове userRepository.findOne () или .findAll () я обнаруживаю исключение NullPointerException.
Обновление значений столбца Int до любого допустимого значения Int решает проблему.Однако, в нашем случае использования, мы должны хранить пустые значения в некоторых столбцах типа int, если нет доступных значений.

Вот моя черта 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.Использование опций типа данных для столбца созданного.
2. Изменение установщика для CreatedBy для установки -1, если значение в аргументе равно нулю.
Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

0 голосов
/ 25 октября 2018

Если вы попытались использовать тип данных 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
}
...