PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Наследяването на JPA @EntityGraph включва незадължителни асоциации на подкласове

Можете да използвате само EntityGraph ако атрибутът на асоцииране е част от суперкласа и по този начин също част от всички подкласове. В противен случай EntityGraph винаги ще се провали с Exception които получавате в момента.

Най-добрият начин да избегнете проблема с избора на N+1 е да разделите заявката си на 2 заявки:

Първата заявка извлича MCValue обекти с помощта на EntityGraph за извличане на асоциацията, картографирана от selected атрибут. След тази заявка тези обекти се съхраняват в кеша от първо ниво на Hibernate / контекста на постоянство. Hibernate ще ги използва, когато обработва резултата от второто запитване.

@Query("SELECT m FROM MCValue m") // add WHERE clause as needed ...
@EntityGraph(attributePaths = {"selected"})
public List<MCValue> findAll();

Втората заявка след това извлича Answer обект и използва EntityGraph за да извлече и свързаната Value образувания. За всяка Value обект, Hibernate ще създаде конкретния подклас и ще провери дали кешът от първо ниво вече съдържа обект за този клас и комбинация от първичен ключ. Ако случаят е такъв, Hibernate използва обекта от кеша от първо ниво вместо данните, върнати от заявката.

@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();

Тъй като вече извлякохме всички MCValue обекти със съответния selected обекти, сега получаваме Answer обекти с инициализирана Value асоциация. И ако асоциацията съдържа MCValue обект, неговият selected асоциирането също ще бъде инициализирано.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да конфигурирам максималната дължина на идентификатора на Aurora DB? как?

  2. Показване на всички имена на бази данни

  3. PostgreSQL SQL заявка за обхождане на цял неориентиран график и връщане на всички намерени ръбове

  4. Групиран LIMIT в PostgreSQL:показване на първите N реда за всяка група?

  5. Излезе книгата „PostgreSQL 9.0 High Performance“.