Hibernate 休眠删除

Hibernate 休眠删除,hibernate,Hibernate,如何从Hibernate中删除对象 Session session = HibernateSession.getSessionFactory().openSession(); org.hibernate.Transaction tx = session.beginTransaction(); int q = session.createQuery("from Modele where (model='"+u.getModel() +"' and markaid=

如何从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>

我认为您的HQL缺少DELETE关键字,这导致了AST错误(基本上是HQL语法错误)

DELETE from Modele where (model='"+u.getModel() +"' and markaid='"+u.getMarki().getId()+"'"
如果要使用delete方法(hibernate 3中实际上不推荐使用HQL),则必须确保在删除实体之前,在删除实体的同一会话中加载该实体


我通常使用HQL样式的delete,尽管我建议使用命名参数而不是字符串连接。

不要连接查询。最好使用查询对象模式@Taky:最好使用查询参数或条件来构建动态查询。(查询对象模式不能解决查询的创建问题)。@StefanSteinegger:我认为查询对象模式()定义模式包括条件和查询参数,不是吗?这不是答案。这是Hibernate使用的唯一建议。我被你的代码示例弄糊涂了。为什么使用commit的delete方法不适合您?一般来说,您可以使用或HQL delete:但问题是,每次使用createQuery进行删除查询时,都会出现“信息:不受支持!使用AST转换器…”错误。
DELETE from Modele where (model='"+u.getModel() +"' and markaid='"+u.getMarki().getId()+"'"