Узнайте о стратегии генерации первичного ключа JPA во время выполнения - PullRequest
0 голосов
/ 25 сентября 2018

Учитывая сокращенную сущность JPA ниже, как я могу узнать, что GenerationType провайдер персистентности выбирает во время выполнения?

@Entity
@Table(name = "book")
public class Book {

    @Id
    @Column(name = "id")
    @GeneratedValue
    private Long id;
}

Когда GeneratedValue.strategy явно не указан, как в примере, он по умолчаниюна AUTO, а в документах для GenerationType.AUTO указано следующее:

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

Я хочу посмотреть, какую стратегию он на самом деле выбирает во время выполнения.

1 Ответ

0 голосов
/ 25 сентября 2018

Я бы начал использовать некоторый отражающий код, такой как:

// setup code, it's just my code for this test...
Book b = new Book();
PersistenceProvider pp = new HibernatePersistenceProvider();
Map<String,String> m = new HashMap<>();
BookJpaController bc = new BookJpaController( pp.createEntityManagerFactory( "myPP", m ) );
bc.create( b );

// reflective code to introspect the Entity and the PersistenceProvider
for ( Field f : b.getClass().getDeclaredFields() ) {
    if ( f.isAnnotationPresent( GeneratedValue.class ) ) {
        GeneratedValue gv = f.getAnnotation( GeneratedValue.class );
        System.out.println( gv.generator() );
        System.out.println( gv.strategy() );
        System.out.println( gv );
    }
}

for ( Field f : pp.getClass().getDeclaredFields() ) {
    try {
        f.setAccessible( true );
        System.out.println( f.getName() + " " + f.get( pp ) );
    } catch ( IllegalAccessException exc ) {
        exc.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...