【发布时间】:2020-12-02 11:18:05
【问题描述】:
我在尝试使用 EntityManager 执行查询时收到 org.hibernate.hql.internal.ast.QuerySyntaxException。
我在 Java SE 应用程序中独立使用 Hibernate。我没有使用 XML 配置。
这就是我获取会话和 EntityManager 的方式(设置变量是 Map<String, String>):
StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder();
registryBuilder.applySettings(settings);
registry = registryBuilder.build();
MetadataSources sources = new MetadataSources(registry);
Metadata metadata = sources.getMetadataBuilder().build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
Session session = sessionFactory.openSession();
EntityManager em = session.getEntityManagerFactory().createEntityManager();
这是我的实体类:
@Entity
@Table(name = "playeraccount")
public class PlayerAccount {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "playerId")
private String playerId;
@Column(name = "balance")
private Double balance;
[getters, setters...]
}
表SQL:
CREATE TABLE PlayerAccount (
id BIGINT NOT NULL UNIQUE PRIMARY KEY,
playerId VARCHAR(255) NOT NULL UNIQUE,
balance DOUBLE NOT NULL DEFAULT 0.0
);
最后是查询:
TypedQuery<PlayerAccount> q = em.createQuery("SELECT a FROM PlayerAccount a WHERE a.playerId = :uuid", PlayerAccount.class);
q.setParameter("uuid", uuid);
PlayerAccount acc = q.getSingleResult();
整个例外是:
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: PlayerAccount is not mapped [SELECT a FROM PlayerAccount a WHERE a.playerId = :uuid]
【问题讨论】:
-
你的表名一样吗?
-
你的桌子叫playeraccount,可以试试小机箱吗?选择一个 FROM 玩家帐号?
-
@SusanMustafa 小写时同样的错误。
-
您的实体中定义的表是小案例 playeraccount,但您声明创建表 PlayerAccount 。因此,也要在您的 Entitylevel 上更改它,然后将 PlayerAccount 留在您的查询中。 @JakeS。
-
等等....你没有映射班级? configuration.addAnnotatedClass(com.xyz.entities.PlayerAccount.class);