Spring JPA Аннотации и ORM.xml альтернатива? - PullRequest
0 голосов
/ 05 октября 2018

Я хочу спроектировать свой микросервис таким образом, чтобы я мог как можно проще менять Frameworks.Так что у меня есть Интерфейс для всего, что может измениться в будущем, но я не могу сделать это для сущностей, потому что я не знаю способ использования JPA + Hibernate без использования @Entity / @Id .. или объявленияФайл ORM.xml.Есть ли способ определить класс (ы) конфигурации, которые обрабатывают сущности?

Случайный пример:

@Entity 
@IdClass(DemoId.class)
@Table(name = "demo",catalog="demodb")
public class Demo implements Serializable{
    @Id
    private long pk1;
    @Id
    private long pk2;
    @Id
    private long pk3;    
    @Lob
    String description; 

    @ElementCollection(targetClass=String.class)
    List<String> infos = new ArrayList<>(); 
}

public class DemoId implements Serializable{   
    private long pk1;
    private long pk2;
    private long pk3;    
}

Как можно разделить мои сущности (в данном случае Demo) иJPA-аннотации в двух классах?Так что, если когда-нибудь будет что-то, что делает JPA устаревшим, я мог бы легко переключиться (и просто заменить 1 адаптер или что-то в этом роде)

Ty в продвинутом

1 Ответ

0 голосов
/ 05 октября 2018

Исходя из моего понимания и опыта работы с JPA, невозможно получить лучшее из обоих миров с этой проблемой.JPA опирается на аннотации непосредственно внутри файла.На мой взгляд, лучшая альтернатива - создать два отдельных файла .java для каждого.Это не очень хорошее решение, но я не думаю, что вы получите что-то лучше.

ex: Файл # 1 DemoAnnotated.java

@Entity 
@IdClass(DemoId.class)
@Table(name = "demo",catalog="demodb")
public class Demo implements Serializable{
    @Id
    private long pk1;
    @Id
    private long pk2;
    @Id
    private long pk3;    
    @Lob
    String description; 

    @ElementCollection(targetClass=String.class)
    List<String> infos = new ArrayList<>(); 
}

Файл # 2 Demo.java

public class Demo implements Serializable{
    private long pk1;
    private long pk2;
    private long pk3;    
    String description; 
    List<String> infos = new ArrayList<>(); 
}

Вы, вероятно, сэкономите время в долгосрочной перспективе, чтобы просто оставить аннотации на данный момент.Если вам нужно позже быстро переключаться между фреймворками - это потребует рефакторинга, но вы должны быть в состоянии сделать это довольно быстро.Я не могу представить, чтобы изменения были слишком интенсивными.Это может быть просто @Entity -> @SomeOtherName, в этом случае вы можете выполнять поиск и замену.Поиск и замена может быть вашим спасителем здесь.

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