Хранение ссылки на класс Java в базе данных - PullRequest
0 голосов
/ 22 мая 2018

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

Есть интерфейс для действий:

public interface IAction {
    Object perform(Work work, Map<String, String> parameter) throws Exception;
}

Существует несколько реализаций:

public class SingleFileConvertAction implements IAction {
    public InputStream perform(Work work, Map<String, String> parameter) throws Exception {
        // ...
    }
}

public class CacheDeleteAction implements IAction {
    public Object perform(Work work, Map<String, String> parameter) throws Exception {
        // ...
    }
}
// ...

Существует класс управления заданиями:

@Entity
public class ActionControl {

    @Id
    @GeneratedValue
    private Integer id;

    @ElementCollection
    private Map<String, String> parameter = new HashMap<String, String>();

    @ManyToOne
    @JoinColumn(name = "work_id", referencedColumnName = "id", nullable = false)
    private Work work;

    private IAction action;

    private Date requestTime;
    private Date startTime;
    private Date endTime;

    // ...

    private ActionControl() {}

    public ActionControl(Work work, String action, Map<String, String> parameter) {
        this.parameter = parameter;
        this.work = work;
        // ...
    }
}

Теперь я хочу сохранить элемент управления действиями в базе данных.Мне нужно только знать, какой класс действий использовать.Все остальное сохраняется в work и parameter.

Я думал о сохранении строки и переключении (), чтобы выбрать ее как "CacheDeleteAction" -> CacheDeleteAction, но я предполагаю, что есть лучший способ сделать это.Можно ли сохранить «CacheDeleteAction.class» в поле базы данных?(Я видел это в аннотациях Spring)

Как сохранить ссылку на класс Java в базе данных?

1 Ответ

0 голосов
/ 22 мая 2018

, как сказал @XtremeBaumer, зависит от вашего использования, если вам нужно создать экземпляр позже, то, что XtremeBaumer предложил, будет предпочтительным способом, иначе с enum это будет выглядеть примерно так:

   public enum IActionEnum {
        CACHE_DELETE_ACTION("Cache delete action"),
        SINGLE_FILE_CONVERT_ACTION("Single file convert action"),

        private String actionDescription;

        IActionEnum(String description) {
            actionDescription= description;
        }

        @Override
        public String toString() {
            return actionDescription;
        }
    }

И всякий раз, когда вы хотите сохранить его в БД, вы можете использовать его как

IAction actionControl = new IAction();
// set all other parameters
actionControl.setIAction(IActionEnum.CACHE_DELETE_ACTION)

actionControlRepository.save(actionControl);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...