表没有映射?

时间:2011-08-12 20:07:47

标签: java hibernate-mapping

现在我的理解是在db中映射一个表,我们添加:

@Entity()
@Table(name = "test")
public class Test implements Serializable {
    /** Constant - serial version UID. */
    public final static long serialVersionUID = 1L;

    /** Member variable - represents the "name" field. */
    public String name;
}

但出于某种原因,当我查询时:

delete from test;

它给了我这个错误:

15:55:54,140 ERROR [JsonFilter] javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: spa_splash_page_ad is not mapped [delete from spa_splash_page_ad]
javax.servlet.ServletException: javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: spa_splash_page_ad is not mapped [delete from spa_splash_page_ad]
    at com.pinksheets.common.web.servlet.DeleteSplashPageServlet.fetch(DeleteSplashPageServlet.java:30)
    at com.pinksheets.common.web.servlet.DeleteSplashPageServlet.fetch(DeleteSplashPageServlet.java:17)

任何想法为什么这样做?

2 个答案:

答案 0 :(得分:2)

  1. 尝试:

    delete from com.mycompany.database.Test
    阅读fully qualified names(这是完整的包名/路径+类名)

  2. 为什么查询中的单词table

  3. 同时从()

  4. 中删除@Entity()
  5. 你应该保留java约定,用大写字母命名你的实体:

    class Test{} 比你可以:

    delete from fully.qualified.name.Test

  6. 确保实体为@javax.persistence.Entity而非其他内容。

答案 1 :(得分:1)

delete from table test不是我所知道的任何QL中的有效查询。

映射为@IdClass的类是复合ID,您永远不会直接删除它。您将删除具有该ID作为其ID的实体。此外,因为它是@IdClass,所以当你给它一个明确的@Table映射时,我不确定会发生什么。 @IdClass是主键值,并且始终应该用作其他类的id。它没有自己的表。请参阅mapping composite ids的hibernate注释参考并更正use of @IdClass