我知道很多人都问过这个问题,但我刚刚开始使用Java,所以我无法弄明白。
所以这是我的问题:
我正在使用Javarestlet
编写RESTful Web服务。以下是我的DAO
文件的摘要。
try {
session.beginTransaction();
String query = "select number from blockedcli";
@SuppressWarnings("rawtypes")
List list = session.createQuery(query).list(); //.setString("sId", businessId)
logger.error("*******************list*****************************************");
logger.error(list);
logger.error("*******************listend*****************************************");
@SuppressWarnings("rawtypes")
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
blockedcli = (BlockedCli) iterator.next();
}
session.getTransaction().commit();
}
相应地,我的实体类看起来像。
@Entity
@Table(name = "blockedcli")
public class BlockedCli implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="idBlockedCLI", nullable = false, unique=true)
private Integer idBlockedCLI;
@Column(name = "number",nullable = false, length=45)
private String number;
@Column(name = "type", nullable = false)
private Integer type;
.
我在配置目录中放置了一个BlackListedN.hbm.xml
文件,其中包含以下文字。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="tecd.persistence.entity.BlockedCli" table="blockedcli">
<id name="idBlockedCLI" type="long" unsaved-value="null">
<column name="idBlockedCLI" not-null="true"/>
<generator class="identity"/>
</id>
<property name="number">
<column name="number" not-null="true" />
</property>
</class>
</hibernate-mapping>
因为我只想显示数字。
这是数据库表。
+--------------+--------------+--------+------+---------------------+---------------------+---------------------------------------+
| idBlockedCLI | number | status | type | createdDT | updatedDT | BusinessDirectory_idBusinessDirectory |
+--------------+--------------+--------+------+---------------------+---------------------+---------------------------------------+
| 1 | 919845611234 | 1 | 1 | 2014-03-24 13:31:20 | 2014-03-24 13:31:20 | 1 |
+--------------+--------------+--------+------+---------------------+---------------------+---------------------------------------+
但是当我每次运行时都会说
org.hibernate.hql.ast.QuerySyntaxException: blockedcli is not mapped [select number from blockedcli]
请帮我解决这个问题。
这是我的第一个Java程序,所以我不确定还需要详细说明这些内容,但如果需要其他任何其他内容,请告诉我。
答案 0 :(得分:7)
使用HQL时,需要引用正确大写的实体名称/属性,而不是表名/列名。只需将您的查询更改为select number from BlockedCli
,它就可以正常运作。
答案 1 :(得分:1)
尝试更改查询中的实体名称
select b.number from BlockedCli b
或者,如果您不想更改查询名称,可以设置name
注释的Entity
属性
@Entity(name="blockedcli")
答案 2 :(得分:1)
同时检查hibernate-cfg.xml
是否包含映射java对象的条目。
<mapping class="com.yourpackage.App" />
答案 3 :(得分:0)
我遇到了这个问题,但在我的情况下问题是由于gradle版本。 当我将系统从linux更改为mac时,我不得不从gradle-1.0-milestone-3切换到gradle-1.0-milestone-4,因为里程碑-3在OSX中不起作用。在gradle-1.0-milestone-4中我遇到了同样的问题,然后我不得不将我的gradle版本降级为gradle-1.0-milestone-1。现在它工作正常
答案 4 :(得分:0)
为实体注释设置名称
@Entity(name="blockedcli")
然后将您的查询设置如下。
String query = "select b.number from blockedcli b";