查询与注释
问题描述:
当我试图完成选择与Hibernate休眠,抛出此异常:查询与注释
org.hibernate.hql.internal.ast.QuerySyntaxException: formato is not mapped [from formato]
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93)
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:324)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3420)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3309)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
检查我的对象注解,认为它的确定,这是代码:
@Entity
@Table(name="formato")
public class Formato implements Serializable{
/**
*
*/
private static final long serialVersionUID = 5849413670083213438L;
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="formato")
private String formato;
@Column(name="tipoItem")
private int tipoItem;
在BD的atributtes具有相同的名称
明显看跌getter和setter方法,我的DAO:
@Transactional
public List<Formato> findAllFormatos() {
Transaction tx = null;
session = sessionFactory.getCurrentSession();
try {
tx = session.beginTransaction();
List formatos = session.createQuery("from formato").list();
System.out.println("Pase :'D");
tx.commit();
return formatos;
} catch (Exception e) {
// TODO: handle exception
if (tx != null) tx.rollback();
e.printStackTrace();
return null;
}
}
终于控制器,但我认为这个问题是在DAO
@RequestMapping(value = "timbre", method = RequestMethod.GET)
public String redirigir(@RequestParam("id") int id, Model model) {
Timbre t = null;
if (id == 1){
t = new Timbre();
model.addAttribute("t", t);
List<Formato> formatos= timbreDAO.findAllFormatos();
model.addAttribute("formatos", formatos);
return "formTimbre";
}
else if (id == 2)
return "modificarTimbre";
else if (id == 3)
return "eliminarTimbre";
else if (id == 4)
return "buscarTimbre";
else
return "timbre";
}
答
你得到异常,如果你没有在SessionFactory的声明的注释实体。 如果您使用的是spring,那么在sessionFactory Bean中指定以下内容。它也可以是.cfg文件。
<property name="annotatedClasses">
<list>
<value>com.somefolder.Formato</value>
</list>
</property>
答
在HQL,你应该使用映射@Entity,而不是实际的表名和列名的Java类名和属性名,所以HQL应该是:
List<Formato> formatos = (List<Formato>)session.createQuery("from Formato").list();
是,也是在HQL它必须是“从Formato F” – Zeus
是的,你是对的,但我发现我没有写每个对象更好的解决方案: \t \t \t \t \t \t \t com.mufi.objeto \t \t \t \t \t 但现在抛出此异常: 错误创建名称为豆 'mySessionFactory这个' 在ServletContext的资源定义[/WEB-INF/servlet-context.xml ]:调用init方法失败;嵌套异常是org.hibernate.MappingException:持久化类未知:int –
vrvictor
您可能必须在映射文件中使用Integer来代替int – Zeus