kam*_*aci 6 java hibernate jpa entitymanager
我为我的项目使用JPA和Hibernate.我有两个具有相同名称但在不同包中的类.他们是:
@Entity(name = "X_USER")
@Table(name = "X_USER")
public class User {
Run Code Online (Sandbox Code Playgroud)
和:
@Entity
@Table(name="Y_USER")
public class User {
Run Code Online (Sandbox Code Playgroud)
我正在创建一个搜索查询:.getSimpleName()但它没有用,因为它们的简单名称是相同的.我改成了.getName().
但是,它仍然会让人感到困惑User.
编辑:
我有这个:
SELECT_BY_PROPERTY_QUERY = "SELECT p FROM :CLASS: p WHERE p.:PROPNAME:=?";
Run Code Online (Sandbox Code Playgroud)
那我:
SELECT_BY_PROPERTY_QUERY.replaceFirst(":CLASS:", clazz.getName()).replaceFirst(":PROPNAME:", propertyName);
Run Code Online (Sandbox Code Playgroud)
当我调试它时,它会像:
Select p from User p Where p.name=?
Run Code Online (Sandbox Code Playgroud)
它仍然是User,它不包括包信息,并返回错误的User类.
如果要创建JPQL查询,则需要将Entity名称传递给它。如您所发布的,您有2个实体,它们由相同的 Java类表示,但实体名称不同(X_USER由您显式设置并User隐式设置)。
如果要动态获取实体的名称,则应使用Metamodel,因此应执行以下操作(未选中):
EntityManager em = ...
Metamodel model = em.getEntityManagerFactory().getMetamodel();
String entityName = model.entity(com.your.pckg.User.class).getName();
Run Code Online (Sandbox Code Playgroud)
HTH。
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |