Hibernate генерирует очень длинные запросы SQL с несколькими ассоциациями @manytoone (необходимо решение, совместимое соJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Hibernate генерирует очень длинные запросы SQL с несколькими ассоциациями @manytoone (необходимо решение, совместимое со

Сообщение Anonymous »

У меня есть сущность под названием Ustyapi, у которого есть много отношений @manytoone.
Несмотря на то, что я помечаю их как ленивые или пытаюсь использовать join fetch, Hibernate по -прежнему генерирует очень длинные и сложные запросы SQL при извлечении этой сущности.

Код: Выделить всё

@Getter
@Setter
@Entity
@Table(name = "yer_ustyapi")
public class Ustyapi extends SBPBaseEntity {

@Column(name = "adi", length = 512, nullable = false)
private String adi;

@Column(name = "sebatlas_oid")
private String sebatlasOid;

@JsonIgnoreProperties({"serbestBolge", "olusturan", "olusturmaTarihi", "sonGüncelleyen", "sonGüncellemeTarihi"})
@ManyToOne(fetch = FetchType.EAGER, targetEntity = Parsel.class)
@JoinColumn(name = "parsel", referencedColumnName = "oid", nullable = false)
private Parsel parsel;

@JsonIgnoreProperties({"bkiFirma", "olusturan", "olusturmaTarihi", "sonGüncelleyen", "sonGüncellemeTarihi"})
@ManyToOne(fetch = FetchType.EAGER, targetEntity = SerbestBolge.class)
@JoinColumn(name = "sbolge", referencedColumnName = "oid", nullable = false)
private SerbestBolge serbestBolge;

@ManyToOne(fetch = FetchType.EAGER, targetEntity = Il.class)
@JoinColumn(name = "il", referencedColumnName = "oid")
private Il il;

@ManyToOne(fetch = FetchType.EAGER, targetEntity = Ilce.class)
@JoinColumn(name = "ilce", referencedColumnName = "oid")
private Ilce ilce;

@ManyToOne(fetch = FetchType.EAGER, targetEntity = Mahalle.class)
@JoinColumn(name = "mahalle", referencedColumnName = "oid")
private Mahalle mahalle;

@ManyToOne(fetch = FetchType.EAGER, targetEntity = Sokak.class)
@JoinColumn(name = "sokak", referencedColumnName = "oid")
private Sokak sokak;

// ... and many more ManyToOne fields ...
}

< /code>
Всякий раз, когда я пытаюсь получить эту сущность, Hibernate генерирует очень длинные запросы с большим количеством соединений. Например: < /p>
Hibernate: select u1_0.oid,u1_0.iskan_belge_no,u1_0.adi,u1_0.aktif, ... from yer_ustyapi u1_0 left join ... left join ... left join ... -- query continues for a very long time

Это создает проблемы с производительностью и делает отладку чрезвычайно трудной. /> Я уже пробовал @batchsize, присоединяйтесь к Fetch и Lazy, но результаты все еще не были оптимальными.
У сущности слишком много отношений @manytoone, но мне все время не нужны. излишне длинные запросы?
Есть ли способ выбрать только корневые объекты и ассоциации только при необходимости, но при этом все равно будет совместимым со спецификацией?
использование EntityGraph (с JpaspeciationExecutor) будет хорошим посадкой? Если да, как я могу интегрировать это правильно? Могу ли я настроить эту сущность, чтобы Hibernate не генерировал излишне длинные запросы?
Есть ли способ выбрать только корневую сущность и извлекать ассоциации только при необходимости, но все же сделать его совместимым со спецификацией? Если да, то как я могу это правильно интегрировать?

Подробнее здесь: https://stackoverflow.com/questions/797 ... sociations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»