2016-05-07 4 views
0

I以下のエンティティがあります。Hibernateは、削除されません@PrePersistと@PreUpdate

@Entity 
@Table(name="accounts") 
public class AccountEntity extends TimestampAbstractEntity { 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column(name = "id") 
    private int id; 

} 

TimestampAbstractEntity:セッションから削除する方法がまったく機能していない

@MappedSuperclass 
public abstract class TimestampAbstractEntity implements Serializable{ 

    @Column(name = "created_at", columnDefinition = "DATETIME") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date createdAt; 

    @Column(name = "updated_at", columnDefinition = "DATETIME") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date updatedAt; 

    public Date getCreatedAt() { 
     return createdAt; 
    } 

    @PrePersist 
    public void setCreatedAt(Date createdAt) { 
     this.createdAt = createdAt; 
    } 

    public Date getUpdatedAt() { 
     return updatedAt; 
    } 

    @PreUpdate 
    public void setUpdatedAt(Date updatedAt) { 
     this.updatedAt = updatedAt; 
    } 
} 

、いなくてもログをが示されている。 私は、私が休止状態-コア5.1.0.Final

を使用しています

getCurrentSession().createQuery(delete from yadada where id=:id).setInteger("id", id).executeUpdate(); 

ログポップポップアップしますが、何もデータベースに起こりませんを使用して回避策を試してみましたが、私の構成は次のとおりです。

Configuration configuration = new Configuration(); 

      configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
      configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); 
      configuration.setProperty("hibernate.current_session_context_class", "thread"); 
      configuration.setProperty("hibernate.id.new_generator_mappings", "false"); 
      configuration.setProperty("hibernate.show_sql", "true"); 

      configuration.addAnnotatedClass(AccountEntity.class); 

      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder() 
        .applySettings(configuration.getProperties()); 
      return configuration.buildSessionFactory(builder.build()); 
+0

を、あなたがトランザクション内で削除を実行していますか? – Pace

+0

createSqlQueryを使用してください。具体的にはhqlを使用する必要がありますか? – PeaceIsPearl

+0

@Paceいずれかの方法で動作しません – Lundira

答えて

0

あなたは次のことを試して、結果を教えてもらえますか?

public void deleteAccount(SessionFactory sessionFactory, Integer entityId) { 
    Session session = sessionFactory.getCurrentSession(); 
    session.getTransaction().begin(); 
    AccountEntity account = session.get(AccountEntity.class, entityId); 
    session.delete(account); 
    session.getTransaction().commit(); 
    session.getTransaction().begin(); 
    account = session.get(AccountEntity.class, entityId); 
    System.out.println(account); //Should be null! 
    session.getTransaction().rollback(); 
} 

それとも、クエリを使用する場合:ちょうどダブルチェックに

public void deleteAccount(SessionFactory sessionFactory, Integer entityId) { 
    Session session = sessionFactory.getCurrentSession(); 
    session.getTransaction().begin(); 
    session.createQuery("delete from AccountEntity where id=:id").setInteger("id", id).executeUpdate(); 
    session.getTransaction().commit(); 
    session.getTransaction().begin(); 
    account = session.get(AccountEntity.class, entityId); 
    System.out.println(account); //Should be null! 
    session.getTransaction().rollback(); 
} 
関連する問題