// ТИПЫ
@Getter
abstract class A {
private String a = "aaa";
}
@Getter
class B extends A {
private String b = "bbb";
}
@Getter
class C extends A {
private String c = "ccc";
}
// КЛАССЫ для работы с типами
class HandleB {
Commons<B> commons = new Commons<>();
B instanceB = commons.getObject();
List<B> listB = commons.getList();
}
class HandleC {
// примерно такие же методы как в HandleB
}
// КЛАСС с шаблонным кодом
class Commons<T extends A> {
List<T> getList() {
List<T> list = new ArrayList<>();
for (int i = 0; i < 3; i++) {
T item = getObject();
list.add(item);
}
return list;
}
T getObject() {
// как здесь получить объект нужного типа?
}
}
@Configuration
public class WebConfig {
@Bean
public RouterFunction<?> router() {
Resource html = new ClassPathResource("static/index.html");
return route(
GET("/"), request ->
ok()
.contentType(MediaType.TEXT_HTML)
.bodyValue(html)
)
.andOther(resources("/**", new ClassPathResource("/static")))
;
}
}
Если ты превращаешь null в 0, то EntityManager тут же начинает трактовать запись как измененную. И при выходе из зоны видимости будет писать ее обратно в БД.
Так что можешь получить нехилую просадку в производительности и долго удивляться "почему тормозит все, я же просто запись вычитал!"
@Column(name = "myobj_id", insertable = false, updatable = false)
private Integer myobjID;
@ManyToOne @JoinColumn(name = "myobj_id", referencedColumnName = "id")
private MyObject myObject;
Наверно надо передавать в конструктор Commons фабрику, настроенную на выдачу соответствующих объектов, типа new Commons(new Factory("B"))