JPA em.find (id) работает на Oracle, но не на MariaDB - PullRequest
0 голосов
/ 22 ноября 2018

Здравствуйте, у меня есть приложение, которое работает на JBoss EAP 7 с JPA Hibernate.

У меня проблемы с простым вызовом entityManager.find(id).

Этот вызов вызывает один вызов базы данных Oracle 12SQL

select messagedat0_.id as id1_4_0_,
       messagedat0_.messageid as messageid3_4_0_, 
       messagedat0_.messageblob as messageblob2_4_0_, 
       messagedat0_.messagetype as messagetype4_4_0_, 
       messagedat0_.retaintime as retaintime5_4_0_, 
       extractedv1_.messageid as messageid1_1_1_, 
       extractedv1_.absender as absender2_1_1_, 
       extractedv1_.empfaenger as empfaenger3_1_1_,
       extractedv1_.nachrichtentyp as nachrichtentyp4_1_1_, 
       extractedv1_.uuid as uuid5_1_1_ 
from messagedata messagedat0_
left outer join ExtractedValues extractedv1_ on messagedat0_.messageid=extractedv1_.messageid
where messagedat0_.id=?

, который возвращает сущность.

Против MariaDB он выдает два выбора Hibernate:

select messagedat0_.id as id1_4_0_,
       messagedat0_.messageid as messagei3_4_0_,
       messagedat0_.messageblob as messageb2_4_0_,
       messagedat0_.messagetype as messaget4_4_0_,
       messagedat0_.retaintime as retainti5_4_0_,
       extractedv1_.messageid as messagei1_1_1_,
       extractedv1_.absender as absender2_1_1_,
       extractedv1_.empfaenger as empfaeng3_1_1_,
       extractedv1_.nachrichtentyp as nachrich4_1_1_,
       extractedv1_.uuid as uuid5_1_1_
from messagedata messagedat0_
left outer join ExtractedValues extractedv1_ on messagedat0_.messageid=extractedv1_.messageid
where messagedat0_.id=?

2018-11-22 09:46:36,328 INFO  [stdout] (default task-26) Hibernate:
select extractedv0_.messageid as messagei1_1_0_,
       extractedv0_.absender as absender2_1_0_,
       extractedv0_.empfaenger as empfaeng3_1_0_,
       extractedv0_.nachrichtentyp as nachrich4_1_0_,
       extractedv0_.uuid as uuid5_1_0_
from ExtractedValues extractedv0_ where extractedv0_.messageid=?

Когда я запускаю два выбора вручную, первый выбор делаетВернуть ряд второй нет.Это заставляет метод Find возвращать NULL.На мой взгляд, это не ожидаемый результат.

от сущности Messagedata :

@Id
private String id;

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="messageid", referencedColumnName="messageid", updatable=false)
private Set<Msginformation> msginformations;

@OneToMany
@JoinColumn(name="messageid", referencedColumnName="messageid")
private Set<Protocol> protocols;

@OneToMany
@JoinColumn(name="messageid", referencedColumnName="messageid")
private Set<Retry> retries;

@OneToOne
@JoinColumn(name="messageid", referencedColumnName="messageid", insertable=false, updatable=false)
private ExtractedValues extractedValues;

Отношение OneToOne к ExtractedValues ​​вызывает проблемы в MariaDB.Я попытался установить

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>

в файле persistence.xml, но это не решает проблему.Я понятия не имею, что с этим делать ...

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Я надеюсь, что вы не проходите правильный диалект.Пожалуйста, проверьте диалект.

Вы можете использовать ниже диалект.

org.hibernate.dialect.MariaDBDialect
0 голосов
/ 23 ноября 2018

Спасибо за ваши ответы. Я пробовал оба диалекта с

       <property name="hibernate.dialect" value="org.hibernate.dialect.MariaDB53Dialect"/>

. К сожалению, JBoss затем отказывается развернуть войну

Невозможно разрешить имя [org.hibernate.dialect.MariaDBDialect] какстратегия [org.hibernate.dialect.Dialect]

Невозможно разрешить имя [org.hibernate.dialect.MariaDB53Dialect] в качестве стратегии [org.hibernate.dialect.Dialect]

0 голосов
/ 22 ноября 2018

Я бы предложил вам использовать любой из следующих диалектов:

org.hibernate.dialect.MariaDBDialect

или

org.hibernate.dialect.MariaDB53Dialect
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...