2016-07-16 83 views
1

我有兩個表如下父子關係:休眠子表中的記錄沒有被清除

Parent Table: 
@Entity 
@Table(name = "frontend.rdp_strategy", uniqueConstraints = {@UniqueConstraint(columnNames = {"name", "datatype","source"})}) 
public class FrontRdpStrategy implements java.io.Serializable { 

    @Id 
// @GeneratedValue(generator="optimized-sequence") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 
    private String name; 
    private String datatype; 
    private String source; 
    @OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER, mappedBy="frontRdpStrategy") 
    private Set<RdpStrategySequence> rdpStrategySequences = new HashSet<RdpStrategySequence>(); 

Child Table: 
@Entity 
@SuppressWarnings("serial") 
@Table(name = "frontend.rdp_strategy_sequence") 
public class RdpStrategySequence implements java.io.Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
// @GeneratedValue(generator="optimized-sequence") 
    private long id; 
    @ManyToOne(cascade = {CascadeType.ALL},fetch=FetchType.EAGER) 
    @JoinColumn(name = "rdp_strategy_id", nullable = false) 
    private FrontRdpStrategy frontRdpStrategy; 
    @ManyToOne(fetch=FetchType.EAGER) 
    @JoinColumn(name = "rdp_strategy_condition_id", nullable = false) 
    private RdpStrategyCondition rdpStrategyCondition; 

這裏CascadeType的是javax.persistence.CascadeType。現在我嘗試使用下面的查詢在子表中指定的父表ID獨生子女表記錄刪除:

session.createQuery("delete from frontend.rdp_strategy_sequence m where m.rdp_strategy_id = :id").setLong("id", id).executeUpdate(); 

但我收到以下異常:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: frontend.rdp_strategy_sequence is not mapped [delete from frontend.rdp_strategy_sequence m where m.rdp_strategy_id = :id] 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96) 
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88) 
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190) 
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) 
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) 
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800) 
    at frontend.guifx.dao.frontend.FrontendGUIFxDao.deleteSequenceForRdp(FrontendGUIFxDao.java:111) 
    at frontend.guifx.controller.EditRdpStrategyController.saveRdpStrategy(EditRdpStrategyController.java:637) 
    ... 60 more 
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: frontend.rdp_strategy_sequence is not mapped 
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189) 
    at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109) 
    at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95) 
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:331) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3633) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3522) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.deleteStatement(HqlSqlBaseWalker.java:435) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:263) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206) 
    ... 69 more 

Kinldy在同一提醒,我在哪裏做錯了?

回答

1

你必須使用實體名稱,如:

session.createQuery("delete from RdpStrategySequence m where m.id = :id").setLong("id", id).executeUpdate(); 
+0

太謝謝你了。它爲我工作。 –

+1

太好了。請將問題標記爲回答以改善SO。 – DiogoSantana