Я использую apache -avro для определения представлений нашей модели данных, используя java 8 и maven.
У меня есть это определение авро
{"namespace": "com.github.emeraldjava.avro",
"type": "record",
"name": "DBTableName",
"fields": [
{"name": "aString", "type": ["string","null"]},
{"name": "aLong", "type": ["long","null"]},
{"name": "aNullableInt", "type": ["int", "null"]},
{"name": "aNullableString", "type": ["string", "null"]},
{"name": "aIntDate", "type": ["null",{ "type": "int", "logicalType": "date" }]},
{"name": "aIntTimeMillis", "type": ["null",{ "type": "int", "logicalType": "time-millis" }]},
{"name": "aLongTimeMicros", "type": ["null",{ "type": "long", "logicalType": "time-micros" }]},
{"name": "aLongTimeStampMillis", "type": ["null",{ "type": "long", "logicalType": "timestamp-millis" }]},
{"name": "aLongTimeStampMicros", "type": ["null",{ "type": "long", "logicalType": "timestamp-micros" }]}
]
}
, и я использую плагин maven-avro для генерации класса DBTableName java.
package com.github.emeraldjava.avro;
import org.apache.avro.specific.SpecificData;
@org.apache.avro.specific.AvroGenerated
public class DBTableName extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"DBTableName\",\"namespace\":\"com.github.emeraldjava.avro\",\"fields\":[{\"name\":\"aString\",\"type\":[\"string\",\"null\"]},{\"name\":\"aLong\",\"type\":[\"long\",\"null\"]},{\"name\":\"aNullableInt\",\"type\":[\"int\",\"null\"]},{\"name\":\"aNullableString\",\"type\":[\"string\",\"null\"]},{\"name\":\"aIntDate\",\"type\":[\"null\",{\"type\":\"int\",\"logicalType\":\"date\"}]},{\"name\":\"aIntTimeMillis\",\"type\":[\"null\",{\"type\":\"int\",\"logicalType\":\"time-millis\"}]},{\"name\":\"aLongTimeMicros\",\"type\":[\"null\",{\"type\":\"long\",\"logicalType\":\"time-micros\"}]},{\"name\":\"aLongTimeStampMillis\",\"type\":[\"null\",{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}]},{\"name\":\"aLongTimeStampMicros\",\"type\":[\"null\",{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"}]}]}");
public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
@Deprecated public java.lang.CharSequence aString;
@Deprecated public java.lang.Long aLong;
@Deprecated public java.lang.Integer aNullableInt;
@Deprecated public java.lang.CharSequence aNullableString;
@Deprecated public org.joda.time.LocalDate aIntDate;
@Deprecated public org.joda.time.LocalTime aIntTimeMillis;
@Deprecated public java.lang.Long aLongTimeMicros;
@Deprecated public org.joda.time.DateTime aLongTimeStampMillis;
@Deprecated public java.lang.Long aLongTimeStampMicros;
с этого авро определение фактически отображается непосредственно в таблицу базы данных. Есть ли существующий или простой способ, где я мог бы использовать сгенерированный класс с функциональностью репозитория данных Spring.
public interface DBTableNameRepo extends Repository<DBTableNameType, Long> {
}
Я хотел бы иметь возможность сохранять и читать данные в интерфейсе @Repository, но не уверен, что требуется. Любой совет будет оценен.