Я пытаюсь сохранить и получить объект, имеющий список enum, в базе данных Neo4j с Kotlin. Хранение сущности с перечислением работает нормально, но десериализация его обратно к тому же перечислению не работает так, как я пытаюсь в Kotlin. Я использую болт-драйвер.
enum class DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
@NodeEntity
data class Weekend(
@Id @GeneratedValue var id: Long? = null,
var days: List<DayOfWeek>? = null
)
fun main(args: Array<String>) {
val config = Configuration.Builder()
.uri("bolt://localhost:7687")
.credentials("username", "password")
.build()
val sessionFactory = SessionFactory(config, "com.example.calendar")
val session = sessionFactory.openSession()
val weekend = session.load(Weekend::class.java, 10L)
weekend.days?.forEach { print("The weekend consists of: $it") }
}
Выполнение этого просто вызывает исключение: Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.example.calendar.DayOfWeek
. Выполнение того же в Java с этим классом работает нормально:
public class WeekendJ {
@Id
@GeneratedValue
Long id;
List<DayOfWeek> days;
public WeekendJ() {
}
public WeekendJ(List<DayOfWeek> days) {
this.days = days;
}
}
Мое ПОМ:
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-core</artifactId>
<version>3.1.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-bolt-driver</artifactId>
<version>3.1.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>1.3.11</version>
</dependency>
Я что-то упускаю из виду? Как вы решите, что это Котлин?