как пропустить поиск в системной таблице при использовании оптимистичных часов на временной метке - PullRequest
0 голосов
/ 28 июня 2011

Когда я пытаюсь использовать eclipselink для реализации параллельного события в DB2.Я добавил аннотацию @Version в классе сущности:

@Version
    @Column(name = "LAST_MNT_TS")
    private Timestamp lastMaintenanceTimestamp;

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

[EL Fine]: 2011-06-28 11:05:21.98--ClientSession(15607581)--Connection(11405376)--Thread(Thread[main,5,main])--SELECT DISTINCT CURRENT TIMESTAMP FROM SYSIBM.SYSTABLES
[EL Fine]: 2011-06-28 11:05:22.309--ClientSession(15607581)--Thread(Thread[main,5,main])--VALUES(1)
[EL Warning]: 2011-06-28 11:05:22.637--UnitOfWork(19624355)--Thread(Thread[main,5,main])--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.ibm.db2.jcc.a.SqlException: DB2 SQL error: SQLCODE: -551, SQLSTATE: 42501, SQLERRMC: DT82056;SELECT;SYSIBM.SYSTABLES
Error Code: -551
Call: SELECT DISTINCT CURRENT TIMESTAMP FROM SYSIBM.SYSTABLES
Query: ValueReadQuery(sql="SELECT DISTINCT CURRENT TIMESTAMP FROM SYSIBM.SYSTABLES")
[EL Config]: 2011-06-28 11:05:29.715--ServerSession(16239564)--Connection(11405376)--Thread(Thread[main,5,main])--disconnect

Как мне пропустить поиск в системной таблице?

1 Ответ

0 голосов
/ 30 июня 2011

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

Источник org.eclipse.persistence.platform.database.DB2Platform показывает, что getTimestampQuery () по-прежнему возвращает тот же неаккуратный расточительный запрос, с которым вы столкнулись. Нет никаких оснований запрашивать SYSIBM.SYSTABLES только для того, чтобы DB2 передала вам временную метку. Если вы достаточно обеспокоены этим, чтобы открыть ошибку, вы можете порекомендовать заменить запрос на "SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1"

Хотя на функцию SYSIBM.SYSTABLES также ссылается getNativeTableInfo () в том же классе, комментарии указывают на то, что этот метод является просто хеджом совместимости с посредственными драйверами JDBC, если допустить, что метод вообще вызывается.

...