Сопоставление аннотаций Hibernate занимает больше времени, чем сопоставление hbm.xml

Я знаю, что это странно, но у меня такая проблема. У меня есть один простой класс pojo, и с помощью struts+hibernate я обновляю таблицу оракула через JPA. единственная сложная вещь, которую я использую, - это последовательность оракула, которая вызывается перед каждым запросом на вставку.

Но когда я использую файл hbm.xml, он дает очень быстрый результат по сравнению с отображением аннотаций. Хочу перейти на аннотацию, может кто знает в чем может быть причина.

файл hbm.xml что-то вроде этого

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping>
    <class  name="com.myproject.VersionSequence" 
            table="Version_Sequence"
            dynamic-update="true">

        <meta attribute="sync-DAO">false</meta>

        <id name="id" column="ID" type="java.lang.Long">
            <generator class="sequence">
                <param name="sequence">Oracle_Sequence</param>
            </generator>
        </id>

        <property name="version" column="VERSION" type="java.lang.Long" not-null="true" />
        .
        .
        .
        .

    </class>    
</hibernate-mapping>

Аннотация соответствует файлу для вышеуказанного файла xml

@Entity
@Table(name="Version_Sequence")
public class VersionSequence implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator = "Oracle_Sequence")
    @GenericGenerator(name = "Oracle_Sequence",
        strategy = "sequence-identity",
        parameters = { @Parameter(name = "sequence", value = "Oracle_Sequence") })
    @Column(name = "ID")
    private Long id;


    @Column(name = "VERSION")
    private Long version;
    .
    .
    .

    // getter/seeters
}

person Pramendra Raghuwanshi    schedule 04.08.2017    source источник


Ответы (1)


Сначала нам нужно понять работу аннотации.

Пример -

Определение @GenericGenerator

http://grepcode.com/file/repo1.maven.org/maven2/org.hibernate/hibernate-core/4.3.2.Final/org/hibernate/annotations/GenericGenerator.java

Применяемая аннотация — @Retention(RUNTIME), что означает, что аннотация должна быть доступна для отражения во время выполнения.

Аннотация использует отражение, а отражение медленное.

Почему отражение медленное?

Каждый шаг подтверждается, когда вы размышляете.

Например, когда вы вызываете метод, ему необходимо проверить, действительно ли цель является экземпляром объявления метода, есть ли у вас правильное количество аргументов, имеет ли каждый аргумент правильный тип и т. д.

Аннотации основаны на отражении.

person Rohit Yadav    schedule 31.10.2017