У меня есть какой-то вид управления заданиями с постоянством через базу данных.
Есть интерфейс для действий:
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 в базе данных?