2011-03-16 22 views
3

比方說,我有實體美孚像 -HQL與完整的類名

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

@skaffman感謝您的更正:) – Premraj 2011-03-16 15:41:03

回答

4

使用完全限定名是沒有意義的,因爲Hibernate不會允許重複的實體名。所以,如果你有不同的包裝中具有相同名稱的實體。 Hibernate會拋出一個DuplicateMappingException。

+0

嗯..好像hibernate內部處理不合格的類名稱,對吧? – Premraj 2011-03-16 16:12:54

+0

它可能具有以entityName作爲鍵的Map。 – 2011-03-16 16:15:59

+0

這意味着如果我指定完全限定的類名,hibernate需要做額外的工作? – Premraj 2011-03-17 06:37:18

0

我不認爲這有什麼區別,但是...我更喜歡非限定名稱,因爲它更短,它使我的HQL更易於理解。我認爲使用完全限定名稱的唯一原因是你有兩個不同的實體(比如來自不同的包),在這種情況下,我寧願將它們映射到不同的實體名稱(如AFoo,BFoo),而是使用完全合格的名稱來區分它們。

+0

Hibernate不允許重複的實體名稱。 – 2011-03-16 16:05:59