О создании строки для запросов в Hibernate и о том, будут ли эти запросы уменьшать создание объектов, если они были конечными статическими - PullRequest
1 голос
/ 02 октября 2009

С учетом этого фрагмента 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)...."
    )
})

Означает ли это, что каждый раз, когда я выполняю это, создается ли строка «запрос» каждый раз, или это случай интернирования строк? Было бы полезно иметь запрос в final static String QUERY, а затем использовать его в @NamedQuery? То же самое будет действительным и для «имени» тогда?

Ответы [ 2 ]

1 голос
/ 02 октября 2009

Производительность или память не улучшаются, но может быть полезно использовать константы для имен запросов, чтобы избежать типографских ошибок, как в этом примере:

// 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();
1 голос
/ 02 октября 2009

String является строковым литералом, поэтому всегда будет интернирован при загрузке класса.

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