Мне нужно реализовать API, который предоставляет пользовательские типы данных для использования при разработке программного обеспечения. Идея состоит в том, что такие типы могут предоставлять дополнительные функции по умолчанию для языков Java.
Например:
class ViewStringList {
// String value
private List<String> values = new ArrayList();
// Define if the value must be show/hide on view
private boolean visible;
public List<String> getValues() {
return values;
}
public void hide() {
this.visible = false;
}
public void show() {
this.visible = true;
}
}
Этот пользовательский тип можно рассматривать как расширение от Java List<String>
, потому что он обеспечивает функции hide
и show
. Использование этого типа в качестве свойства Java хорошо, поскольку оно облегчает разработку. Однако, если я хочу сохранить каждое значение из списка ViewStringList
значений в реляционной таблице, используя @ElementCollection
и AttributeConverter
, я не знаю, как это сделать. Например:
@Entity
class Panel {
@ElementCollection
private ViewStringList cars = new ViewStringList();
@ElementCollection
private ViewStringList trucks = new ViewStringList();
// Getters/setters
}
class FormTemplate {
public Panel getUserPanel() {
Panel panel = new Panel();
panel.getCars().show();
panel.getTrucks().hide();
return panel;
}
}
@Converter(autoApply = true)
class ViewStringConverter implemets AttributeConverter<ViewStringList, String> {
@Override
public String convertToDatabaseColumn(ViewStringList viewString) {
return ?;
}
@Override
public ViewStringList convertToEntityAttribute(String string) {
return ?;
}
}
Возможно ли это? Есть еще одна стратегия для достижения этой настойчивости?