繁体   English   中英

具有完全限定类名的 HQL

[英]HQL with fully qualified class name

假设我有实体 Foo 喜欢 -

package com.some.company.model;
// imports
@Entity
public class Foo{
    @Id
    private Long id;    

    // getters / setters and other properties omitted   
}

因此,在通过 HQL 处理实体时,我更喜欢通过完全限定的类名来引用实体,例如 -

entityManager.createQuery(String.format("delete from %s where id = :id", Foo.class.getName()))
                .setParameter("id", fooId)
                .executeUpdate();

我注意到@Entity注释中的一件事 - 默认情况下,name 属性具有实体类的非限定名称。 这让我想为什么不合格的名字?
我应该在 HQL 非限定名称或完全限定名称中使用哪个?

使用完全限定名称没有意义,因为 Hibernate 不允许重复的实体名称。 因此,如果您在不同的包中有具有相同名称的不同实体。 Hibernate 将抛出 DuplicateMappingException。

我不认为它有什么不同,但是......我更喜欢不合格的名字,因为它更短,而且它使我的 HQL 更容易理解。 我能想到使用完全限定名称的唯一原因是您有 2 个不同的Foo实体(例如,来自不同的包),在这种情况下,我宁愿将它们映射到不同的实体名称(例如AFooBFoo )而不是使用完全限定的名称来区分它们。

对于非实体类,您还必须提供包 (getName()) 如果您有多个由不同实体扩展的类,则 HQL 查询无法解决:“来自 com.hello.AbstractEntity”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM