2016-08-10 3 views
2

Можно ли добавить пользовательские параметры в @SQLDelete переопределить в Hibernate? Я не хочу редактировать исходный код Hibernate. В приведенном ниже примере я пытаюсь включить столбец lastUpdatedBy в запрос удаления.Можно ли добавить пользовательские параметры в @SQLDelete переопределить в Hibernate?

Спасибо за любую помощь.

@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

Не совсем ответит на вопрос, но это один из подходов –

Смежные вопросы