0

私はこれについていくつかの質問を見ましたが、私の問題の解決策を導き出すことができません。

次のPositionHistoryエンティティを宣言しています...

@Entity
@Table(name = "position_history")
@Cache (usage=CacheConcurrencyStrategy.READ_WRITE)
@AttributeOverride (name="id", column = @Column(name=PositionHistory.PRIMARY_KEY))
public class PositionHistory extends AbstractPersistable {

    public static final String PRIMARY_KEY = "s_posn_history_id";
    public static final String KEY = "positionHistory";
    public static final String KEY_DATE = "date";
    public static final String KEY_COMMENT = "comment";

    // String field length definitions
    public static final int LENGTH_COMMENTS = 1000;

    // Instance Variables
    private Date date;
    private String comment;

    @Column(name = "d_date", nullable = false)
    public Date getDate() {
    return date;
    }

    public void setDate(Date date) {
    this.date = date;
    }

    @Column(name = "t_comment", length = LENGTH_COMMENTS)
    public String getComment() {
    return comment;
    }

    public void setComment(String comment) {
    this.comment = comment;
    }

    // hashCode()
    // equals()
    // toString()
}

そして、PositionHistoryDaoImp私はいくつかの行を削除しようとしています...

public void deletePositionHistory(Long positionId) {
    getSession().createQuery("delete from position_history a where a.position_id=:id")
        .setParameter("id", positionId).executeUpdate();
}

電話をかけるdeletePositionHistoryと、次のエラーが発生します...

ERROR a.g.q.d.v.s.c.CommandProcessorImpl:75 - org.hibernate.hql.ast.QuerySyntaxException: position_history is not mapped 

ご覧のとおり、テーブルはすでにエンティティにマップされており、PositionHisotryエンティティをPositionHistoryDaoImp拡張しています。

私は何が欠けているか、間違っていますか?

あなたの助けは非常にありがたいです。

ありがとうございました。


Position実在物...

@Entity
@Table(name = "position")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@AttributeOverride(name = "id", column = @Column(name = Position.PRIMARY_KEY))
public class Position extends AbstractPersistableEffective {
    ...
    public static final String PRIMARY_KEY = "s_posn_id";
    public static final String KEY_ID = "positionId";
    private List<PositionHistory> history = new ArrayList<PositionHistory>();

    ...

    @OneToMany(fetch = FetchType.LAZY)
    @Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
    @JoinColumn(name = Position.PRIMARY_KEY)
    @IndexColumn(name = AbstractPersistable.INDEX_COLUMN)
    public List<PositionHistory> getHistory() {
        return history;
    }

    public void setHistory(List<PositionHistory> history) {
        this.history = history;
    }
}
4

2 に答える 2

2

エンティティ名ではなく、クエリでテーブル名を使用しています。これを変える:

getSession().createQuery("delete from position_history a where a.position_id=:id")

に:

getSession().createQuery("delete from PositionHistory a where a.id =:id")
于 2012-04-18T06:34:20.200 に答える
1

以下に示すように、ファイル内のhibernate.query.factory_classプロパティを変更しhibernate.cfg.xmlます。

<property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property>
于 2012-10-11T09:25:12.057 に答える