0

Hibernate からオブジェクトを削除するにはどうすればよいですか?

 Session session = HibernateSession.getSessionFactory().openSession();
        org.hibernate.Transaction tx = session.beginTransaction();
        int q = session.createQuery("from Modele where (model='"+u.getModel() +"' and markaid='"+u.getMarki().getId()+"'").executeUpdate();
      //  session.delete(u);

        session.getTransaction().commit();

情報: サポートされていません! AST トランスレータを使用...

session.delete(u) 代わりに使用すると、これが得られます

情報: 削除処理で一時エンティティを処理しています

CREATE TABLE modele
(
  id serial NOT NULL,
  markaid integer NOT NULL,
  cena numeric(100,2),
  model character varying(32),
  CONSTRAINT k_glwny PRIMARY KEY (id),
  CONSTRAINT obcy FOREIGN KEY (markaid)
      REFERENCES marki (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE
)

<hibernate-mapping>
    <class name="bazaMap.Modele" table="modele" schema="public">
        <id name="id" type="int">
            <column name="id" />
            <generator class="identity" />
        </id>
        <many-to-one name="marki" class="bazaMap.Marki" fetch="select">
            <column name="markaid" not-null="true" />
        </many-to-one>
        <property name="cena" type="java.lang.Double">
            <column name="cena" scale="0" />
        </property>
        <property name="model" type="string">
            <column name="model" length="32" />
        </property>
        <set name="wypozyczenias" inverse="true">
            <key>
                <column name="modelid" not-null="true" />
            </key>
            <one-to-many class="bazaMap.Wypozyczenia" />
        </set>
    </class>
</hibernate-mapping>

これも効かない

session.createQuery("from Modele where model = :mmodel and markaid = :mmarkaid").setParameter("mmodel", u.getModel()).setParameter("mmarkaid", u.getMarki().getId()).executeUpdate();
4

1 に答える 1

0

あなたの HQL には、AST エラー (基本的には HQL 構文エラー) の原因となっている DELETE キーワードが欠落していると思います。

DELETE from Modele where (model='"+u.getModel() +"' and markaid='"+u.getMarki().getId()+"'"

delete メソッド (HQL を使用するために hibernate 3 で実際に非推奨になっている) を使用する場合は、エンティティを削除する前に、エンティティを削除するのと同じセッションでエンティティをロードする必要があります。

私は通常、HQL スタイルの削除を使用しますが、文字列連結の代わりに名前付きパラメーターを使用することをお勧めします。

于 2013-01-25T04:58:47.697 に答える