Я использую пользовательский тип объекта:
@NodeEntity
class SutStateEntity(state: SutState) extends Entity {
def this() = this(null)
@Convert(classOf[SutStateConverter])
val sutState = state
}
Теперь я хотел бы получить сущность, которая соответствует полю класса sutState.
Обратите внимание, что тип SutState должен быть преобразован моим пользовательским конвертером SutStateConverter, так как это не примитивный тип, поддерживаемый Neo4J OGM.
Это код, который я использую для фильтрации подходящей сущности:
val filter = new Filter("sutState", ComparisonOperator.EQUALS, sutState)
val first = session.loadAll(classOf[SutStateEntity], filter).stream().findFirst()
Однако этот код приводит к следующему исключению:
Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: No serializer found for class de.retest.recheck.ui.descriptors.StringAttribute$1 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.HashMap["sutState_0"]->de.retest.recheck.ui.descriptors.SutState["rootElements"]->java.util.ArrayList[0]->de.retest.recheck.ui.descriptors.RootElement["identifyingAttributes"]->de.retest.recheck.ui.descriptors.IdentifyingAttributes["attributes"]->java.util.ArrayList[0]->de.retest.recheck.ui.descriptors.StringAttribute["type"])
StringAttribute - это тип поля экземпляра, хранящегося в SutState.
Он похож на XML-аннотации SutState, и SutStateConverter может без проблем маршалировать и демаршировать его (проверено с помощью пользовательского модульного теста).
Не использует ли Neo4J OGM конвертер для моего фильтра?
Как мне указать фильтр для поля класса sutState?
Вот код моего пользовательского конвертера:
class SutStateConverter extends AttributeConverter[SutState, String] {
def toGraphProperty(value: SutState): String = XmlTransformerUtil.getXmlTransformer.toXML(value)
def toEntityAttribute(value: String): SutState =
XmlTransformerUtil.getXmlTransformer.fromXML[SutState](new ByteArrayInputStream(value.getBytes(StandardCharsets.UTF_8)))
}
XmlTransformerUtil.getXmlTransformer.toXML и XmlTransformerUtil.getXmlTransformer.fromXML производят маршал и демаршал SutStates в и из XML.
Класс был протестирован в модульном тесте и должен работать.