2016-08-10 84 views
2

是否有可能將自定義參數添加到Hibernate中的@SQLDelete覆蓋?我不想編輯Hibernate源代碼。在下面的例子中,我試圖在刪除查詢中包含lastUpdatedBy列。是否可以將自定義參數添加到Hibernate中的@SQLDelete覆蓋中?

感謝您的任何幫助。

@Entity 
@Table(name = "user") 
@SQLDelete(sql = "UPDATE user SET deleted='Y', version=version+1 WHERE id=? AND version=? AND lastUpdatedBy = ?") 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id", unique = true, nullable = false) 
    private Long id; 

    @Column(name = "deleted") 
    @Type(type = "yes_no") 
    protected boolean deleted; 

    @Version 
    @Column(name = "version", nullable = false) 
    protected Integer version; 

    @Column(name = "last_updated_by") 
    protected Long lastUpdatedBy; 

    ... 

} 
+0

嗨,我想知道解決的辦法也一樣,你明白嗎? – Tony

+0

嗨托馬斯,我得到了一個解決方案,如果你需要,我會與你分享 – Tony

+0

是的,發佈它,我會給你信用! –

回答

0

下面是示例代碼,就可以按照這樣的代碼重寫手動刪除事件:

public class CustomDeleteEventListener extends DefaultDeleteEventListener implements DeleteEventListener { 

    private static final Logger log = Logger.getLogger(CustomDeleteEventListener.class); 

    @Autowired 
    private UserService userService; 

    /** 
    * Override the default delete logic here, handle the given delete event. 
    * 
    * @param event DeleteEvent object which can get hibernate session or entity 
    * @param transientEntities The cache of entities already deleted 
    * @throws HibernateException 
    */ 
    @Override 
    public void onDelete(DeleteEvent event, Set transientEntities) throws HibernateException { 
     // get current deleting entity from event 
     Object entity = event.getObject(); 
     if (log.isDebugEnabled()) { 
      log.debug("entity class type is " + entity.getClass()); 
     } 
     if (entity instanceof User) { 
      if (log.isDebugEnabled()) { 
       log.debug("Detect delete User event, delegate to user service to do soft deletion. entity type: " + entity.getClass()); 
      } 
      userService.removeUser((User) entity); 
     } else { 
      // other entities still follow their default logic 
      super.onDelete(event, transientEntities); 
     } 
    } 
} 
+0

不完全回答問題,但它是一種方法 –

相關問題