现在我的理解是在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)
任何想法为什么这样做?
答案 0 :(得分:2)
尝试:
delete from com.mycompany.database.Test
阅读fully qualified names(这是完整的包名/路径+类名)
为什么查询中的单词table
?
同时从()
@Entity()
你应该保留java约定,用大写字母命名你的实体:
class Test{}
比你可以:
delete from fully.qualified.name.Test
确保实体为@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
。