pracuję na Java wniosku, że należy zrobić operacje CRUD (używając Hibernate 4.3.8) na dwóch różnych baz danych z tego samego schematu bazy danych. Istnieje baza danych MySQL (wersja 5.1.73) i Oracle (11g Express Edition wydanie 11.2.0.2.0 - 64bit).Hibernate auto generowania klucza z MySQL i Oracle
Klasy Java z Adnotacje JPA zostały wygenerowane z tabel bazy danych za pomocą generatora kodu hibernacji.
Problemem jest to, że teraz mamy potrzebę użycia automatycznego generowania klucza podstawowego i MySQL używa GenerationType.IDENTITY i Oracle wykorzystuje GenerationType.SEQUENCE. Ponadto w niektórych rzadkich przypadkach potrzebujemy możliwości ręcznego ustawienia klucza głównego.
Kod śledzenia w klasie z adnotacjami działa z automatycznym generowaniem kluczy dla obu baz danych, ale kończy się niepowodzeniem, jeśli klucz podstawowy jest ustawiony samodzielnie.
@GeneratedValue(strategy=GenerationType.AUTO, generator="sequence_generator")
@SequenceGenerator(name="sequence_generator", sequenceName="SEQUENCE1")
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
Bez @SequenceGenerator @GeneratedValue i adnotacje możliwe jest ręczne ustawienie klucza podstawowego, ale generacji auto nie działa.
Wypróbuj [ręcznie określić-the-value-of-a- primary-key-in-jpa-generatedvalue-column] [1]. Istnieje wiele rozwiązań. [1]: http://stackoverflow.com/questions/12002260/manually-specify-the-value-of-a-primary-key-in-jpa-generatedvalue-column – Volatile
Baza zorientowane rozwiązanie w tym wątku nie działa dla mnie, ponieważ schemat bazy danych nie powinien być zmieniany. Są inni ludzie niż ja, którzy polegają na tym, że schemat bazy danych się nie zmienia. I nie wiem, czy jest to możliwe i jak napisać własny Custom Id Generator, który obsługuje obie bazy danych MySQL i Oracle (Tożsamość i Sequence). We wszystkich przykładach używają one IdentifierGenerator OR Sequencegenerator. –
To pytanie nie jest jasne. Czy mówisz, że masz kilka klas, dla których Hibernate ma automatycznie generować identyfikatory i ręcznie przypisywać identyfikatory do innych klas; lub czy chcesz, aby Hibernate automatycznie przypisywał identyfikatory do wystąpień klasy przez większość czasu, ale w niektórych przypadkach chcesz ręcznie przypisywać identyfikatory do niektórych instancji tej samej klasy? – manish