So ändern Sie die Hibernate GenerationType-ID abhängig von der zugrunde liegenden Datenbank
Posted: 27 Dec 2024, 15:15
Ich habe ein Projekt namens main_project (verwendet Spring-Boot v2), das alle Konfigurationsklassen einschließlich der JPA-Konfiguration enthält. Das main_project verfügt auch über Entitätsklassen (wie Benutzer, Personal).
Die JPA-Konfiguration für verwaltete Entitätsklasse in main_project sieht wie folgt aus:
Andere Projekte verwenden main_project als Abhängigkeit für das Bootstrapping. Andere Projekte, die von main_project abhängen, können Personal- oder Benutzer- und ...-Entitäten verwenden und sie können unterschiedliche DBMS wie MySQL oder Oracle haben.
Als ich main_project als Abhängigkeit in Projekt A verwendet habe, Entitätsklasse von A-Projekt erweitert MainEntity und erstellt Es handelt sich um eigene Entitätsklassen und eine eigene Datenbankkonfigurationsdatei.
Mein Problem liegt im Typ des DBMS und GenerationType in der id-Eigenschaft in main_project.
Ich denke, dass ich das Java-Util zur Laufzeit reflektieren und einige Anmerkungen hinzufügen muss, die auf dem Datenbanktyp basieren! Ist es richtig?
Ich habe auch gelesen, this_post_19875993, aber es hat nicht geholfen.
this_post_30731627 erklärte, dass wir einen der benutzerdefinierten GenerationType[/b] auswählen können, ich aber automatisch ohne Änderungen an main_project auswählen möchte, da A ein Projekt nicht ändern kann MainEntity-Klasse von main_project und kann sie einfach verwenden.
Die JPA-Konfiguration für verwaltete Entitätsklasse in main_project sieht wie folgt aus:
Code: Select all
@Entity
public abstract class MainEntity {
@Id
@GeneratedValue(GenerationType=?)
@Column(name = "id")
private T id;
}
@Entity
public class Personnel extends MainEntity {
@Column(name = "firstName")
private String firstName;
// other proprties
}
Als ich main_project als Abhängigkeit in Projekt A verwendet habe, Entitätsklasse von A-Projekt erweitert MainEntity und erstellt Es handelt sich um eigene Entitätsklassen und eine eigene Datenbankkonfigurationsdatei.
Mein Problem liegt im Typ des DBMS und GenerationType in der id-Eigenschaft in main_project.
- 1) wenn A-Projekt Verwendet die Mysql-Datenbank, MainEntity muss haben:
Code: Select all
@GeneratedValue(strategy = GenerationType.IDENTITY)
- 2) wenn Ein Projekt die Oracle-Datenbank MainEntity< verwendet /strong> muss Folgendes haben:
Code: Select all
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_generator")
Code: Select all
@SequenceGenerator(name="id_generator", sequenceName = "id_seq", allocationSize=1)
Ich denke, dass ich das Java-Util zur Laufzeit reflektieren und einige Anmerkungen hinzufügen muss, die auf dem Datenbanktyp basieren! Ist es richtig?
Ich habe auch gelesen, this_post_19875993, aber es hat nicht geholfen.
this_post_30731627 erklärte, dass wir einen der benutzerdefinierten GenerationType[/b] auswählen können, ich aber automatisch ohne Änderungen an main_project auswählen möchte, da A ein Projekt nicht ändern kann MainEntity-Klasse von main_project und kann sie einfach verwenden.