@Entity @Table(name = "user") public class User { @Id @GeneratedValue private long id; @Basic @Column(name = "username", updatable = false, unique = true, nullable = false) private String username; // getter and setter }
@Entity @Table(name = "anObject") public class AnObject { @Id @GeneratedValue private long id; @Column private String value; // getter and setter }
@Embeddable public class LastModified { @Column @Temporal(TemporalType.TIMESTAMP) private Calendar lastUpdated; @OneToOne @JoinColumn(name = "lastEditor_id") private User lastEditor; // getter and setter }
public interface LastModifiable { LastModified getLastModified(); void setLastModified(LastModified modified); }
@Entity @Table(name = "anObject") public class AnObject implements LastModifiable { @Id @GeneratedValue private long id; @Column private String value; @Embedded private LastModified lastModified; // getter and setter }
@Component public class LastModifiedListener extends DefaultSaveOrUpdateEventListener { private transient static final Logger LOG = LoggerFactory.getLogger(LastModifiedListener.class.getName()); @Autowired private UserDao userDao; @Override public void onSaveOrUpdate(SaveOrUpdateEvent event) { LOG.trace("object: {}", event.getObject()); if (event.getObject() instanceof LastModifiable) { LastModified lastModified = new LastModified((User) userDao.get(2)); ((LastModifiable) event.getObject()).setLastModified(lastModified); LOG.trace("object: {}", event.getObject()); } super.onSaveOrUpdate(event); } }
@Component public class HibernateEventWiring { @Autowired private SessionFactory sessionFactory; @Autowired private LastModifiedListener lastModifiedListener; @PostConstruct public void registerListeners() { EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService( EventListenerRegistry.class); registry.getEventListenerGroup(EventType.SAVE_UPDATE).prependListener(lastModifiedListener); } }
org.springframework.data.jpa.domain.support.AuditingEntityListener
did not add to save the example with event handling in HibernateSource: https://habr.com/ru/post/204854/
All Articles