Hibernate中的NamedNativeQuery会生成许多select语句吗?如何以批处理方式获取引用的实体?

时间:2015-11-13 15:17:45

标签: java hibernate fetching-strategy batch-fetching

我以为我理解了hibernate的抓取策略,但似乎我错了。

所以,我有一个namedNativeQuery:

@NamedNativeQueries({
  @NamedNativeQuery(
    name = "getTest",
    resultClass = ArticleOnDate.class,
    query = "SELECT `a`.`id` AS `article_id`, `a`.`name` AS `name`, `b`.`price` AS `price` FROM article a LEFT JOIN price b ON (a.id = b.article_id) WHERE a.date <= :date"
  )
 })
 @Entity()
 @Immutable
 public class ArtikelOnDate implements Serializable {  
   @Id
   @OneToOne
   @JoinColumn(name = "article_id")
   private Article article;  
 ...  
 }

然后我称之为:

Query query = session.getNamedQuery("getTest").setDate("date", date);
List<ArticleOnDate> list = (List<ArticleOnDate>) query.list();

查询返回了数千个实体......好吧,好吧,但是在查询之后hibernate查询了其他数千个查询:

Hibernate: 
    select
        article0_.id as id1_0_0_,
        article0_.bereich as name2_0_0_,
        price1_.price as price1_14_1_
    from
        article artikel0_ 
    where
        artikel0_.id=?

好的,这是逻辑,因为@OneToOne关系是急切获取的。我不想让它变得懒惰,所以我想要一个批量提取策略。

我试图注释Article属性,但它不起作用:

@Id
@OneToOne
@JoinColumn(name = "article_id")
@BatchSize(size=100)
private Article article;  

那么我该怎样做才能在批处理中获取关系?

0 个答案:

没有答案