Hibernate не может найти объект в базе данных после добавления кеша второго уровня

После добавления уровня 2 кеш-спящий режим возвращает для объекта значение null. Hibernate возвращает значение null для объекта (TrackingItem), поскольку не может найти в кэше отношение ManyToOne (навигация). Когда он пытается запросить базу данных для навигации, запрос возвращает 0 строк, даже если он существует в базе данных. Без кеша 2-го уровня спящий режим может найти объект в базе данных.

Вот моя среда:
Сервер: JBoss EAP 6.1
Hibernate 4.2.0.Final
Infinispan: 5.2.6.Final

Я прочитал и перечитал руководство по infinspan по настройке кеша уровня 2 здесь а также документацию по спящему режиму по кешу уровня 2 здесь .

В настоящее время я использую CacheConcurrencyStrategy.TRANSACTIONAL с управляемыми контейнером транзакциями, чтобы синхронизировать базу данных и кеш. Согласно документации, Infinispan поддерживает CacheConcurrencyStrategy.TRANSACTIONAL.

Ниже приведены 2 объекта (TrackingItem и Navigation). Все несвязанные поля и методы были удалены из объектов.

TrackingItem.java

@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "TRACKING_ITEM")
@IdClass(IdPartitionDateCompositePk.class)
public class TrackingItem extends AbstractEntity<IdPartitionDateCompositePk> {

    @Id
    @Column(name = "TRACKING_ITEM_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "TRACKING_ITEM_SEQ_GENERATOR")
    @SequenceGenerator(name = "TRACKING_ITEM_SEQ_GENERATOR", sequenceName = "TRACKING_ITEM_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();
    @JoinColumn(name = "AVG_ICL_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = false, updatable = false)
    @ManyToOne(optional = false)
    private ClassificationValidValue averageInclusionStatus;
    @OneToOne
    @JoinColumns({
        @JoinColumn(name = "FILE_ID",nullable = true,updatable = true),
        @JoinColumn(name = "FILE_PARTITION_DT",nullable = true,updatable = true)
    })
    private File file;
    @ManyToOne(optional = true)
    @JoinColumn(name = "EAE_INCLUSION_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = true, updatable = true)
    private ClassificationValidValue exceptionStatus;
    //The navigation is not found in the cache and is then queried by hibernate.
    @ManyToOne(optional = true)
    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID", nullable = true, updatable = true),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT",nullable = true,updatable = true)
    })
    private Navigation navigation;
    @JoinColumn(name = "SOURCE_SYSTEM_ID", nullable = false)
    @ManyToOne(optional = false      private SonarApplication sourceSystem;
}

Navigation.java

@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}

Standalone.xml Конфигурация кэша 2-го уровня Hibernate в подсистеме infinispan

<subsystem xmlns="urn:jboss:domain:infinispan:1.4">
    <cache-container name="hibernate" default-cache="local-query" module="org.jboss.as.jpa.hibernate:4">
        <transport lock-timeout="60000"/>
        <local-cache name="local-query">
            <transaction mode="NONE"/>
            <eviction strategy="LRU" max-entries="100000"/>
            <expiration max-idle="300000"/>
        </local-cache>
        <invalidation-cache name="entity" mode="SYNC">
            <transaction mode="NON_XA"/>
            <eviction strategy="LRU" max-entries="100000"/>
            <expiration max-idle="300000"/>
        </invalidation-cache>
        <replicated-cache name="timestamps" mode="ASYNC">
            <transaction mode="NONE"/>
            <eviction strategy="NONE"/>
        </replicated-cache>
    </cache-container>
</subsystem>

Свойства Persistence.xml

<properties>
    <property name="jboss.as.jpa.providerModule" value="org.hibernate"/>
    <property name="jboss.as.jpa.adapterModule" value="org.jboss.as.jpa.hibernate:4"/>
    <property name="jboss.as.jpa.adapterClass" value="org.jboss.as.jpa.hibernate4.HibernatePersistenceProviderAdaptor"/>
    <property name="hibernate.show_sql" value="false"/>
    <property name="hibernate.format_sql" value="false"/>
    <property name="hibernate.hbm2ddll.auto" value="validate"/>
    <property name="hibernate.cache.use_query_cache" value="false" />
    <property name="hibernate.cache.use_second_level_cache" value="true"/>
    <property name="hibernate.cache.generate_statistics" value="true" />
    <property name="hibernate.cache.use_structured_entries" value="false" />
    <property name="hibernate.cache.infinispan.statistics" value="false"/>
    <property name="hibernate.cache.infinispan.use_synchronization" value="true"/> 
    <property name="hibernate.cache.region.factory_class" value="org.jboss.as.jpa.hibernate4.infinispan.InfinispanRegionFactory"/>            
    <property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/hibernate" />
    <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory"/>
    <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
</properties>

Наконец, вот запись журнала с настройками hibernate, infinispan и jboss.jdbc.spy для отслеживания, чтобы узнать, почему hibernate возвращает элемент отслеживания Null. Я выделил самые важные строки жирным шрифтом и добавил несколько комментариев.

# Теперь разрешите навигацию для элемента отслеживания. Navigation partition_dt - это 24 января, 16:15:57 PST 2014, это метка времени, которую он был вставлен в базу данных. Этот процесс запущен 24 января, 16:22: 03 078 PST 2014 г.

TRACE (org.infinispan.interceptors.InvocationContextInterceptor) Вызывается командой GetKeyValueCommand {key = com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 null PST 2014}, flags = Fri Jan 24 16:15:57 PST 2014} } и InvocationContext (org.infinispan.context.impl.LocalTxInvocationContext@334a966b)

TRACE (org.infinispan.transaction.TransactionTable) Создана новая локальная транзакция: LocalTransaction {remoteLockedNodes = null, isMarkedForRollback = false, lockedKeys = null, backupKeyLocks = null, topologyId = 0, isFromStateTransfer = false} org.transaction.infinfinfinfinf. SyncLocalTransaction @ 974cf

TRACE (org.infinispan.container.EntryFactoryImpl) Существует в контексте? нулевой

TRACE (org.infinispan.container.EntryFactoryImpl) Получено из контейнера null

TRACE (org.infinispan.interceptors.CallInterceptor) Выполнение команды: GetKeyValueCommand {key = com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014}, flags = null}.

TRACE (org.infinispan.commands.read.GetKeyValueCommand) Запись не найдена

TRACE (org.infinispan.interceptors.InvocationContextInterceptor) Вызывается с помощью команды PutKeyValueCommand {key = com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PSTg 2014}, value = Fri Jan 24 16:15:57 PSTg 2014}, value = Fri Jan 24 16:15:57 PSTg 2014}, value = .hibernate.cache.infinispan.access.PutFromLoadValidator $ PendingPutMap @ 7fd40ef9, flags = null, putIfAbsent = true, lifespanMillis = -1, maxIdleTimeMillis = 60000, успешный = true} и InvocationKeyContextation.Context (org.NtextConext).

TRACE (org.infinispan.util.concurrent.locks.LockManagerImpl) Попытка заблокировать com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014} с тайм-аутом сбора данных 10000 миллис

TRACE (org.infinispan.util.concurrent.locks.containers.ReentrantPerEntryLockContainer) Создание и получение нового экземпляра блокировки для ключа com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014}

TRACE (org.infinispan.util.concurrent.locks.LockManagerImpl) Успешно получена блокировка com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014}!

TRACE (org.infinispan.interceptors.EntryWrappingInterceptor) Обертывание записи 'com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014}'? истинный

TRACE (org.infinispan.container.EntryFactoryImpl) Существует в контексте? нулевой

TRACE (org.infinispan.container.EntryFactoryImpl) Получено из контейнера null

TRACE (org.infinispan.container.EntryFactoryImpl) Создание новой записи.

TRACE (org.infinispan.interceptors.CallInterceptor) Выполнение команды: PutKeyValueCommand {key = com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014}, value = org .hibernate.cache.infinispan.access.PutFromLoadValidator $ PendingPutMap @ 7fd40ef9, flags = null, putIfAbsent = true, lifespanMillis = -1, maxIdleTimeMillis = 60000, success = true}.

TRACE (org.infinispan.interceptors.EntryWrappingInterceptor) Информация о фиксации записи ReadCommittedEntry (41a13c88) {key = com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014} , value=org.hibernate.cache.infinispan.access.PutFromLoadValidator$PendingPutMap@7fd40ef9, oldValue = null, isCreated = true, isChanged = true, isRemoved = false, isValid = true}

TRACE (org.infinispan.container.entries.ReadCommittedEntry) Обновление записи (key = com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014} удалено = ложно допустимо = true изменено = true создано = true загружено = false value=org.hibernate.cache.infinispan.access.PutFromLoadValidator$PendingPutMap@7fd40ef9)

TRACE (org.infinispan.interceptors.EntryWrappingInterceptor) Возвращаемое значение - null.

TRACE (org.infinispan.util.concurrent.locks.LockManagerImpl) Попытка разблокировать com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014}

TRACE (org.infinispan.util.concurrent.locks.containers.ReentrantPerEntryLockContainer) Разблокировка экземпляра блокировки для ключа com.test.db.entities.Navigation # IdPartitionDateCompositePk {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014}

#Hibernate не может найти навигацию ни в одном кэше, она перейдет в базу данных.

TRACE (org.hibernate.event.internal.DefaultLoadEventListener) Объект не разрешен ни в одном кэше: (com.test.db.entities.Navigation # component (id, partitionDate) {id = 391438, partitionDate = Fri, 24 января, 16 : 15: 57 PST 2014})

TRACE (org.hibernate.persister.entity.AbstractEntityPersister) Получение объекта: (com.test.db.entities.Navigation # component (id, partitionDate) {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014})

ОТЛАДКА (org.hibernate.loader.Loader) Загрузка объекта: (com.test.db.entities.Navigation # component (id, partitionDate) {id = 391438, partitionDate = Fri Jan 24 16:15:57 PST 2014})

DEBUG (org.hibernate.engine.jdbc.internal.LogicalConnectionImpl) Получение соединения JDBC

DEBUG (org.hibernate.engine.jdbc.internal.LogicalConnectionImpl) Получено соединение JDBC

<Сильный> ОТЛАДКА (jboss.jdbc.spy) Java: / SD_DATA_SOURCE (Соединение) prepareStatement (выберите navigation0_.NAVIGATION_ID, как NAVIGATI1_12

@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.PARTITION_DT как PARTITIO2_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.BLNKT_SLS_ORDER_CD как BLNKT3_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.DEFAULT_FLG как DEFAULT4_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.DESCRIPTION_TXT как DESCRIPT5_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.END_DT_TM, как END6_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.EAE_INCLUSION_STA_VLD_VAL_ID как EAE13_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.NOTE_EXIST_FLG как NOTE7_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.REV_BY как REV8_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.REV_DT как REV9_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.START_DT_TM как START10_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.TEST_FLG как TEST11_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, navigation0_.TIME_BASED_FLG как TIME12_12
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
, classifica1_ .CLS_VLD_VAL_ID, как CLS1
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica1_.VALUE_ABBREVIATED_NM как VALUE2
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica1_.CLASSIFICATION_TYPE_ID как CLASSIF10
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica1_.VALUE_DISPLAY_SEQ_NBR как VALUE3
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica1_.DISPLAY_FLG как DISPLAY4
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica1_.VALUE_LONG_NM как VALUE5
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica1_.VALUE_MEDIUM_NM как VALUE6
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, классификационный a1_.REV_BY, как REV7
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica1_.REV_DT как REV8
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica1_.VALUE_SHORT_NM как VALUE9
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "NAVIGATION")
@IdClass(IdPartitionDateCompositePk.class)
public class Navigation extends AbstractEntity<IdPartitionDateCompositePk> {
    @Id
    @Column(name = "NAVIGATION_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "NAVIGATION_SEQ_GENERATOR")
    @SequenceGenerator(name = "NAVIGATION_SEQ_GENERATOR", sequenceName = "NAVIGATION_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();

    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID"),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT")
    })
    @OneToMany
    private Set<TrackingItem> trackingItems = new HashSet<TrackingItem>();

}
0_, classifica2_.CLASSIFICATION_TYPE_ID как CLASSIFI1
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "TRACKING_ITEM")
@IdClass(IdPartitionDateCompositePk.class)
public class TrackingItem extends AbstractEntity<IdPartitionDateCompositePk> {

    @Id
    @Column(name = "TRACKING_ITEM_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "TRACKING_ITEM_SEQ_GENERATOR")
    @SequenceGenerator(name = "TRACKING_ITEM_SEQ_GENERATOR", sequenceName = "TRACKING_ITEM_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();
    @JoinColumn(name = "AVG_ICL_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = false, updatable = false)
    @ManyToOne(optional = false)
    private ClassificationValidValue averageInclusionStatus;
    @OneToOne
    @JoinColumns({
        @JoinColumn(name = "FILE_ID",nullable = true,updatable = true),
        @JoinColumn(name = "FILE_PARTITION_DT",nullable = true,updatable = true)
    })
    private File file;
    @ManyToOne(optional = true)
    @JoinColumn(name = "EAE_INCLUSION_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = true, updatable = true)
    private ClassificationValidValue exceptionStatus;
    //The navigation is not found in the cache and is then queried by hibernate.
    @ManyToOne(optional = true)
    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID", nullable = true, updatable = true),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT",nullable = true,updatable = true)
    })
    private Navigation navigation;
    @JoinColumn(name = "SOURCE_SYSTEM_ID", nullable = false)
    @ManyToOne(optional = false      private SonarApplication sourceSystem;
}
1_, classifica2_.DESCRIPTION_TXT как DESCRIPT2
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "TRACKING_ITEM")
@IdClass(IdPartitionDateCompositePk.class)
public class TrackingItem extends AbstractEntity<IdPartitionDateCompositePk> {

    @Id
    @Column(name = "TRACKING_ITEM_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "TRACKING_ITEM_SEQ_GENERATOR")
    @SequenceGenerator(name = "TRACKING_ITEM_SEQ_GENERATOR", sequenceName = "TRACKING_ITEM_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();
    @JoinColumn(name = "AVG_ICL_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = false, updatable = false)
    @ManyToOne(optional = false)
    private ClassificationValidValue averageInclusionStatus;
    @OneToOne
    @JoinColumns({
        @JoinColumn(name = "FILE_ID",nullable = true,updatable = true),
        @JoinColumn(name = "FILE_PARTITION_DT",nullable = true,updatable = true)
    })
    private File file;
    @ManyToOne(optional = true)
    @JoinColumn(name = "EAE_INCLUSION_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = true, updatable = true)
    private ClassificationValidValue exceptionStatus;
    //The navigation is not found in the cache and is then queried by hibernate.
    @ManyToOne(optional = true)
    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID", nullable = true, updatable = true),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT",nullable = true,updatable = true)
    })
    private Navigation navigation;
    @JoinColumn(name = "SOURCE_SYSTEM_ID", nullable = false)
    @ManyToOne(optional = false      private SonarApplication sourceSystem;
}
1_, classifica2_.CLASSIFICATION_TYPE_NM как CLASSIFI3
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "TRACKING_ITEM")
@IdClass(IdPartitionDateCompositePk.class)
public class TrackingItem extends AbstractEntity<IdPartitionDateCompositePk> {

    @Id
    @Column(name = "TRACKING_ITEM_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "TRACKING_ITEM_SEQ_GENERATOR")
    @SequenceGenerator(name = "TRACKING_ITEM_SEQ_GENERATOR", sequenceName = "TRACKING_ITEM_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();
    @JoinColumn(name = "AVG_ICL_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = false, updatable = false)
    @ManyToOne(optional = false)
    private ClassificationValidValue averageInclusionStatus;
    @OneToOne
    @JoinColumns({
        @JoinColumn(name = "FILE_ID",nullable = true,updatable = true),
        @JoinColumn(name = "FILE_PARTITION_DT",nullable = true,updatable = true)
    })
    private File file;
    @ManyToOne(optional = true)
    @JoinColumn(name = "EAE_INCLUSION_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = true, updatable = true)
    private ClassificationValidValue exceptionStatus;
    //The navigation is not found in the cache and is then queried by hibernate.
    @ManyToOne(optional = true)
    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID", nullable = true, updatable = true),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT",nullable = true,updatable = true)
    })
    private Navigation navigation;
    @JoinColumn(name = "SOURCE_SYSTEM_ID", nullable = false)
    @ManyToOne(optional = false      private SonarApplication sourceSystem;
}
1_, classifica2_.REV_BY как REV4
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "TRACKING_ITEM")
@IdClass(IdPartitionDateCompositePk.class)
public class TrackingItem extends AbstractEntity<IdPartitionDateCompositePk> {

    @Id
    @Column(name = "TRACKING_ITEM_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "TRACKING_ITEM_SEQ_GENERATOR")
    @SequenceGenerator(name = "TRACKING_ITEM_SEQ_GENERATOR", sequenceName = "TRACKING_ITEM_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();
    @JoinColumn(name = "AVG_ICL_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = false, updatable = false)
    @ManyToOne(optional = false)
    private ClassificationValidValue averageInclusionStatus;
    @OneToOne
    @JoinColumns({
        @JoinColumn(name = "FILE_ID",nullable = true,updatable = true),
        @JoinColumn(name = "FILE_PARTITION_DT",nullable = true,updatable = true)
    })
    private File file;
    @ManyToOne(optional = true)
    @JoinColumn(name = "EAE_INCLUSION_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = true, updatable = true)
    private ClassificationValidValue exceptionStatus;
    //The navigation is not found in the cache and is then queried by hibernate.
    @ManyToOne(optional = true)
    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID", nullable = true, updatable = true),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT",nullable = true,updatable = true)
    })
    private Navigation navigation;
    @JoinColumn(name = "SOURCE_SYSTEM_ID", nullable = false)
    @ManyToOne(optional = false      private SonarApplication sourceSystem;
}
1_, classifica2_.REV_DT как REV5
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(name = "TRACKING_ITEM")
@IdClass(IdPartitionDateCompositePk.class)
public class TrackingItem extends AbstractEntity<IdPartitionDateCompositePk> {

    @Id
    @Column(name = "TRACKING_ITEM_ID", nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "TRACKING_ITEM_SEQ_GENERATOR")
    @SequenceGenerator(name = "TRACKING_ITEM_SEQ_GENERATOR", sequenceName = "TRACKING_ITEM_SEQ", allocationSize = 1)
    private Long id;
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PARTITION_DT", nullable = false, updatable = false)
    private Date partitionDate = new Date();
    @JoinColumn(name = "AVG_ICL_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = false, updatable = false)
    @ManyToOne(optional = false)
    private ClassificationValidValue averageInclusionStatus;
    @OneToOne
    @JoinColumns({
        @JoinColumn(name = "FILE_ID",nullable = true,updatable = true),
        @JoinColumn(name = "FILE_PARTITION_DT",nullable = true,updatable = true)
    })
    private File file;
    @ManyToOne(optional = true)
    @JoinColumn(name = "EAE_INCLUSION_STA_VLD_VAL_ID", referencedColumnName="CLS_VLD_VAL_ID", nullable = true, updatable = true)
    private ClassificationValidValue exceptionStatus;
    //The navigation is not found in the cache and is then queried by hibernate.
    @ManyToOne(optional = true)
    @JoinColumns({
        @JoinColumn(name = "NAVIGATION_ID", nullable = true, updatable = true),
        @JoinColumn(name = "NAVIGATION_PARTITION_DT",nullable = true,updatable = true)
    })
    private Navigation navigation;
    @JoinColumn(name = "SOURCE_SYSTEM_ID", nullable = false)
    @ManyToOne(optional = false      private SonarApplication sourceSystem;
}
1_ от СУДОХОДСТВОМ navigation0_ левое внешнее соединение CLASFN_VALID_VALUE classifica1_ в навигации0_.EAE_INCLUSION_STA_VLD_VAL_ID = classifica1_.CLS_VLD_VAL_ID левое внешнее соединение CLASFN_TYPE classifica2_ на classifica1_ навигации.CLASSIFICATION_TYPE_TYPE_ID_AVI_ID = CLASSIFICATION_TYPE_ID_AV2 и навигация0_.PARTITION_DT =?)

TRACE (org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl) Оператор регистрации (org.jboss.jca.adapters.jdbc.jdk6.WrappedPreparedStatementJDK6@98cee2d)

TRACE (org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl) Регистрация последнего оператора запроса (org.jboss.jca.adapters.jdbc.jdk6.WrappedPreparedStatementJDK6@98cee2d)

Параметр привязки TRACE (org.hibernate.type.descriptor.sql.BasicBinder) (1) как (BIGINT) - 391438

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (PreparedStatement) setLong (1, 391438)

Параметр привязки TRACE (org.hibernate.type.descriptor.sql.BasicBinder) (2) как (TIMESTAMP) - пт, 24 января, 16:15:57 PST 2014.

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (PreparedStatement) setTimestamp (2, 2014-01-24 16: 15: 57.347)

TRACE (org.hibernate.loader.Loader) Всего связанных (3) параметров

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (PreparedStatement) executeQuery ()

TRACE (org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl) Регистрация набора результатов (oracle.jdbc.driver.OracleResultSetImpl@5e781fb8)

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (ResultSet) getStatement ()

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (ResultSet) getStatement ()

TRACE (org.hibernate.loader.Loader) Набор результатов обработки

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (ResultSet) next ()

Hibernate не может найти навигацию в базе данных. 0 строк вернули 0 гидратированных объектов, даже если они существуют в базе данных.

** TRACE (org.hibernate.loader.Loader) Готовый набор результатов обработки (0 строк)

TRACE (org.hibernate.loader.Loader) Общее количество гидратированных объектов: 0 **

TRACE (org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl) Оператор освобождения (org.jboss.jca.adapters.jdbc.jdk6.WrappedPreparedStatementJDK6@98cee2d)

TRACE (org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl) Закрытие набора результатов (oracle.jdbc.driver.OracleResultSetImpl@5e781fb8)

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (ResultSet) close ()

TRACE (org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl) Закрытие подготовленного оператора (org.jboss.jca.adapters.jdbc.jdk6.WrappedPreparedStatementJDK6@98cee2d)

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (Заявление) getMaxRows ()

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (Заявление) getQueryTimeout ()

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (Заявление) close ()

TRACE (org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl) Запуск после обработки выполнения оператора (AFTER_STATEMENT)

ОТЛАДКА (org.hibernate.engine.jdbc.internal.LogicalConnectionImpl) Освобождение соединения JDBC

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (соединение) isClosed ()

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (соединение) getWarnings ()

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (соединение) clearWarnings ()

ОТЛАДКА (jboss.jdbc.spy) java: / SD_DATA_SOURCE (Соединение) close ()

DEBUG (org.hibernate.engine.jdbc.internal.LogicalConnectionImpl) Освобождено соединение JDBC

TRACE (org.hibernate.engine.internal.StatefulPersistenceContext) Инициализация неленивых коллекций

DEBUG (org.hibernate.loader.Loader) Готовая загрузка объекта

#Hibernate возвращает значение NULL для объекта отслеживания, поскольку переход не был найден

DEBUG (org.hibernate.ejb.AbstractEntityManagerImpl) HHH015013: возврат null (согласно спецификации JPA) вместо выдачи исключения EntityNotFoundException в качестве объекта (type = com.test.db.entities.TrackingItem, id = IdPartitionDateCompositePk {id = 2766422, partitionDate = 2013-12-21 05: 01: 15.0}) не существует

TRACE (org.hibernate.internal.SessionImpl) Установка режима кеширования на: NORMAL

INFO (com.test.db.services.AbstractJPAPersistenceService) findById: объект: null

INFO (com.test.analyze.TrackingItemLinkNode) resolveEntity: Entity: null

ОШИБКА (org.jboss.as.ejb3.invocation) JBAS014134: Ошибка вызова EJB в компоненте AssociationAnalyzerImpl для метода public abstract com.test.analyze.QueryResult com.test.analyze.AssociationAnalyzer.getAssociations (java.lang.Object, com.test .analyze.AssociationAnalyzer $ RequestType) выдает исключение com.test.analyze.AnalysisException: javax.ejb.EJBException: java.lang.NullPointerException

ОШИБКА (org.jboss.as.ejb3.invocation) JBAS014134: Не удалось вызвать EJB в компоненте NavigationBlockProcessor для общедоступного метода java.util.concurrent.Future com.test.processor.NavigationBlockProcessor.process (java.util.List, int, java. util.concurrent.CountDownLatch): javax.ejb.EJBException: java.lang.NullPointerException

Проблема заключалась в несоответствии между типом столбца partitionDate объекта и базой данных. Раздел Navigation's partitionDate - это объект Date, аннотированный TemporalType.TIMESTAMP, который включает миллисекунды. Столбец Oracle имеет тип DATE, который не включает миллисекунды. Hibernate правильно выполнит setTimestamp для даты, которая включает миллисекунды при запросе базы данных для навигации, но база данных сохраняется только с точностью до секунды при выполнении вставки. Причина, по которой проблема была видна только после добавления кеша уровня 2, заключается в том, что кеш будет хранить объект с миллисекундами и, следовательно, пытается найти его с миллисекундами, добавленными в конце. Самое простое решение - изменить partition_dt на столбец Timestamp и сохранить миллисекунды в базе данных.


person jodt    schedule 28.01.2014    source источник
comment
Спасибо за ответ Флавий, да, запрос, предоставленный jdbc spy, будет извлекать строку из базы данных. Кроме того, навигация добавляется в базу данных примерно за 7 минут до запуска этого процесса. Как я упоминал в одном из комментариев журнала, выделенных жирным шрифтом, Navigation partition_dt - это 24 января, 16:15:57 PST 2014, это метка времени, которую он был вставлен в базу данных. Этот процесс запущен 24 января, 16:22:03 078 по тихоокеанскому стандартному времени, 2014 г.   -  person Radim Vansa    schedule 30.01.2014
comment
Это странно. Можете ли вы попробовать с JBoss EAP 6.2? Также неплохо было бы перейти к файлам TRACE. Один с 2LC и один без, так что их можно сравнивать бок о бок. Наконец, просто свяжите файлы журнала вместо того, чтобы копировать вставку, гораздо проще использовать :)   -  person jodt    schedule 31.01.2014
comment
INFO (com.test.analyze.TrackingItemLinkNode) resolveEntity: разрешение entityKey: IdPartitionDateCompositePk {id = 2766422, partitionDate = 2013-12-21 05: 01: 15.0}
INFO (com.test. analysis.TrackingItemLinkNode) resolveEntity: проверка сущности в cachedEntityMap.
INFO (com.test.analyze.TrackingItemLinkNode) resolveEntity: Entity имеет значение null. Запрос на это.
# Выполняет поиск диспетчера объектов по идентификатору в элементе отслеживания
TRACE (org.hibernate.internal.SessionImpl) Открыт сеанс с отметкой времени: 13906093229 < br> DEBUG (org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl) Пропуск регистрации синхронизации JTA из-за автоматической проверки соединения
DEBUG (org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl) успешно зарегистрировал синхронизацию
DEBUG ( org.hibernate.ejb.AbstractEntityManagerImpl) Ищет JTA-транзакцию для присоединения к
TRACE (org.hibernate.internal.SessionImpl) Установка режима очистки на: AUTO
TRACE (org.hibernate.internal.SessionImpl) Установка режима кеширования кому: NORMAL
TRACE (org.hibernate.event.internal.DefaultLoadEventListener) Загрузка объекта: (com.test.db.entities.TrackingItem # component (id, partitionDate) {id = 2766422, partitionDate = 2013-12-21 05: 01: 15.0})
TRACE (org.hibernate.event.internal.DefaultLoadEventListener) Попытка разрешить: (co m.test.db.entities.TrackingItem # component (id, partitionDate) {id = 2766422, partitionDate = 2013-12-21 05: 01: 15.0})
TRACE (org.infinispan.interceptors. InvocationContextInterceptor) Вызывается командой GetKeyValueCommand {key = com.test.db.entities.TrackingItem # IdPartitionDateCompositePk {id = 2766422, partitionDate = 2013-12-21 05: 01: 15.0}, flags = null} и InvocationContext (org.infinispan. context.impl.LocalTxInvocationContext@6ec285d3)
TRACE (org.infinispan.container.EntryFactoryImpl) Существует в контексте? TransientCacheEntry {key = com.test.db.entities.TrackingItem # IdPartitionDateCompositePk {id = 2766422, partitionDate = 2013-12-21 05: 01: 15.0}, значение = TransientCacheValue {maxIdle = 300000, lastUsed = 1390609322987} TransientCacheValue {значение CacheEntry (com.test.db.entities.TrackingItem) ((Ljava.lang.Object; @ 73f59afe, N, 2013-12-21 15: 01: 15.0,448, null, N, 2013-12-21 05:02 : 30.0,2013-12-21 13: 01: 15.0,463, null, null, (Ljava.lang.Object; @ 192d52c, null, 180, (Ljava.lang.Object; @ 4ee93c82, WDC, (Ljava.lang .Object; @ 3283a347, null, null, MDB_45374bef @ eserver03,2014-01-24 16: 02: 36.0, null, 3,2013-12-21 05: 01: 15.0, null, (Ljava.lang. Object; @ 6054a439, null, 2013-12-21 13: 49: 14.999)}}
TRACE (org.infinispan.interceptors.CallInterceptor) Выполнение команды: GetKeyValueCommand {key = com.test.db.entities.TrackingItem # IdPartitionDateCompositePk {id = 2766422, partitionDate = 2013-12-21 05: 01: 15.0}, flags = null}.
# Элемент отслеживания найден в кеше
TRACE (org.infinispan.commands.read.GetKeyValueCommand) Найдено значение CacheEntry (com.test.db.entities.TrackingItem) ((Ljava.lang.Object; @ 73f59afe, N, 2013-12-21 15: 01: 15.0, 448, null, N, 2013-12-21 05: 02: 30.0,2013-12-21 13: 01: 15.0,463, null, null, (Ljava.lang.Object; @ 192d52c, null, 180, (Ljava .lang.Object; @ 4ee93c82, WDC, (Ljava.lang.Object; @ 3283a347, null, null, MDB_45374bef @ eserver03,2014-01-24 16: 02: 36.0, null, 3,2013-12-21 05: 01: 15.0, null, (Ljava.lang.Object; @ 6054a439, null, 2013-12-21 13:49: 14.999)
TRACE (org.hibernate.event.internal.DefaultLoadEventListener) Преобразование секунды -уровневая запись кеша (CacheEntry (com.test.db.entities.TrackingItem) ((Ljava.lan g.Object; @ 73f59afe, N, 2013-12-21 15: 01: 15.0,448, null, N, 2013-12-21 05: 02: 30.0,2013-12-21 13: 01: 15.0,463, null, null, (Ljava.lang.Object; @ 192d52c, null, 180, (Ljava.lang.Object; @ 4ee93c82, WDC, (Ljava.lang.Object; @ 3283a347, null, null, MDB_45374bef @ eserver03,2014- 01-24 16: 02: 36.0, null, 3,2013-12-21 05: 01: 15.0, null, (Ljava.lang.Object; @ 6054a439, null, 2013-12-21 13: 49: 14.999)) в объект: (com.test.db.entities.TrackingItem # component (id, partitionDate) {id = 2766422, partitionDate = 2013-12-21 05: 01: 15.0})
# Один элемент отслеживания Отношения к одному и Многие к одному разрешаются следующим образом. Все они находятся в кеше, кроме навигации
TRACE (org.hibernate.event.internal.DefaultLoadEventListener) Загрузка объекта: (com.test.db.entities.ClassificationValidValue # 448)
TRACE ( org.hibernate.event.internal.DefaultLoadEventListener) Попытка разрешить: (com.test.db.entities.ClassificationValidValue # 448)
TRACE (org.infinispan.interceptors.InvocationContextInterceptor) Вызывается командой GetKeyValue = command {key .db.entities.ClassificationValidValue # 448, flags = null} и InvocationContext (org.infinispan.context.impl.LocalTxInvocationContext@79517151)
TRACE (org.infinispan.transaction.TransactionTable) Создана новая локальная транзакция {удаленная транзакция: LocalTransaction = null, isMarkedForRollback = false, lockedKeys = null, backupKeyLocks = null, topologyId = 0, isFromStateTransfer = false} org.infinispan.transaction.synchronization.SyncLocalTransaction@974b3
TRACE (org.infinispan.container. EntryFactoryImpl) Существует в контексте? null
TRACE (org.infinispan.container.EntryFactoryImpl) Получено из контейнера TransientCacheEntry {key = com.test.db.entities.ClassificationValidValue # 448, value = TransientCacheValue {maxIdle = 300000, lastUsed = 1390609323000} TransientCacheValue {значение (com.test.db.entities.ClassificationValidValue) (INCAVG, 362,1, Y, Включить в среднем, INCLUDE_IN_AVERAGE, n11111,2013-06-25 09: 43: 11.0, INCLD_AVG)}}
TRACE (org. infinispan.interceptors.CallInterceptor) Выполнение команды: GetKeyValueCommand {key = com.test.db.entities.ClassificationValidValue # 448, flags = null}.
TRACE (org.infinispan.commands.read.GetKeyValueCommand) Найдено значение CacheEntry .test.db.entities.ClassificationValidValue) (INCAVG, 362,1, Y, Включить в среднем, INCLUDE_IN_AVERAGE, n11111,2013-06-25 09: 43: 11.0, INCLD_AVG)
TRACE (org.hibernate.event. internal.DefaultLoadEventListener) Преобразование записи кэша второго уровня (CacheEntry (com.test.db.entities.ClassificationValidValue) (INCAVG, 362,1, Y, Включить в среднем, INCLUDE_IN _AVERAGE, n11111,2013-06-25 09: 43: 11.0, INCLD_AVG)) в объект: (com.test.db.entities.ClassificationValidValue # 448)
... усеченный журнал ... < / strong>
TRACE (org.hibernate.event.internal.DefaultLoadEventListener) Загрузка объекта: (com.test.db.entities.Navigation # component (id, partitionDate) {id = 391438, partitionDate = Пт, 24 января, 16: 15:57 PST 2014})
TRACE (org.hibernate.event.internal.DefaultLoadEventListener) Попытка разрешить: (com.test.db.entities.Navigation # component (id, partitionDate) {id = 391438, partitionDate = Пт, 24 января, 16:15:57 PST 2014})   -  person Galder Zamarreño    schedule 03.02.2014


Ответы (1)


Вы говорите, что объект находится в базе данных. Если вы выполните команду sql, перехваченную jdbc spy, получит ли он запись? Поскольку вы определили выселение, не должно быть проблем, что запись не найдена внутри Infinispan - вы можете посмотреть в журнал, что она была выселена. Возможно, вам стоит попытаться узнать метки времени, когда он был введен в БД, и проверить условия гонки.

person jodt    schedule 07.02.2014