代码之家  ›  专栏  ›  技术社区  ›  non sequitor

在hibernate中为查询创建字符串,以及如果查询是最终静态的,这些查询是否会减少对象创建

  •  1
  • non sequitor  · 技术社区  · 15 年前

    给定这个hibernate片段

    @org.hibernate.annotations.NamedQueries({
        @org.hibernate.annotations.NamedQuery(
            name = "ASSIGNED_CONTINGENCIES",
            query = "select ctg.id from Cont ctg join ctg.labels cl where cl.id = :label_id and ctg.datasetId = tscommon.rdsidtodsid(:datasetting_id)...."
        )
    })
    

    这是否意味着每次我执行这个命令时,都会创建“query”字符串,还是这是一个字符串存储的情况?在一个 final static String QUERY 然后把它用在 @NamedQuery ?那么“name”也同样有效吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   skaffman    15 年前

    字符串是一个字符串文本,因此在加载类时总是要进行实习。

        2
  •  1
  •   Jörn Horstmann    15 年前

    虽然没有性能或内存方面的好处,但使用常量作为查询名称可能会有助于避免打印错误,如本例所示:

    // Entity class
    @NamedQueries({@NamedQuery(name=MyBean.FIND_BY_ID, query="select o from MyBean o where o.id = :id")})
    public class MyBean {
        public static final String FIND_BY_ID = "MyBean.findById";
    }
    
    // Controller/Service/Factory/whatever
    em.createNamedQuery(MyBean.FIND_BY_ID).setParameter("id", id).getSingleResult();