Java-аннотация для вставки в базу данных - PullRequest
0 голосов
/ 25 января 2019

У меня есть база данных, в которой хранятся данные в формате ключ-значение, например:

|---------------------|------------------|
|      Key            |     Value        |
|---------------------|------------------|
|      KEY_FOR_NAME   |     Abhishek     |
|---------------------|------------------|

В настоящее время для хранения данных в этой таблице для каждого ключа я делаю что-то вроде:

String additionalInfoValue = "Abhishek";
AdditionalInfo additionalInfo = new AdditionalInfo(); //entity object
additionalInfo.setKey("KEY_FOR_NAME");
additionalInfo.setSolutionValue(additionalInfoValue);

Есть много пар ключ-значение, которые входят в эту таблицу, поэтому она приводит к большому количеству кода, подобного упомянутому выше.

То, что я хочу сделать, это сделать такую ​​аннотацию, как:

@StoreInTable("KEY_FOR_NAME")
String additionalInfoValue = "Abhishek";

Это сохранит мои данные в таблице и позволит избежать ненужного кода, подобного приведенному выше.

Я использую Spring с Hibernate в своем проекте для выполнения всех сущностей и запросов к базе данных (HQL).

1 Ответ

0 голосов
/ 25 января 2019

Ну, просто проблема отражения Java, если я вас правильно понимаю. Примерно так:

Определить @StoreInTable:

@Target(FIELD)
@Retention(RUNTIME)
public @interface StoreInTable {
    String value();
}

Запишите функцию, которая упаковывает настройки @StoreInTable для любого экземпляра, в список AdditionalInfo:

public class FooUtil {

    public static List<AdditionalInfo> packAdditionalInfo(Object instance) throws Exception {
        List<AdditionalInfo> result = new ArrayList<>();
        for (Field field : instance.getClass().getDeclaredFields()) {
            field.setAccessible(true);
            StoreInTable storeInTable = field.getAnnotation(StoreInTable.class);
            if (storeInTable != null) {
                AdditionalInfo info = new AdditionalInfo();
                info.setKey(storeInTable.value());
                info.setValue(field.get(instance).toString());
                result.add(info);
            }
        }
        return result;
    }
}

Чтобы использовать его, определите любой класс, представляющий пару ключ-значение, который может быть:

public class KeyValue {

    @StoreInTable("KEY1")
    String additionalInfoValue1 = "Abhishek";

    @StoreInTable("KEY2")
    String additionalInfoValue2 = "Keshri";
}

Тогда:

List<AdditionalInfo> infoList = FooUtil.packAdditionalInfo(new KeyValue());
for(AdditionalInfo info : infoList){
    //save the info one by one , in this case it would save (key=KEY1, value=Abhishek) and (key=KEY2 , value=Keshri)
    entityManage.persist(info);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...