假设我有实体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非限定名称或完全限定名称中使用哪个?
答案 0 :(得分:4)
没有必要使用完全限定名,因为Hibernate不允许重复的实体名称。因此,如果您在不同的包中使用了具有相同名称的不同实体。 Hibernate将抛出DuplicateMappingException。
答案 1 :(得分:0)
我不认为它有所作为,但是...我更喜欢不合格的名称,因为它更短,它使我的HQL更容易理解。我可以想到使用完全限定名称的唯一原因是你有两个不同的Foo
实体(比如,来自不同的包),在这种情况下,我更愿意将它们映射到不同的实体名称(例如,{{ 1}},AFoo
)而不是使用完全限定名来区分它们。
答案 2 :(得分:0)
对于非实体类,您还必须提供包(getName()) HQL查询无法解决是否有多个类由不同实体扩展的情况:“来自com.hello.AbstractEntity”