Skip to content

Advanced Topics

public class AuditInterceptor extends EmptyInterceptor {
@Override
public boolean onSave(Object entity, Serializable id,
Object[] state, String[] propertyNames,
Type[] types) {
if (entity instanceof Auditable) {
for (int i = 0; i < propertyNames.length; i++) {
if ("createdDate".equals(propertyNames[i])) {
state[i] = new Date();
return true;
}
}
}
return false;
}
}
// Usage
Session session = sessionFactory.withOptions()
.interceptor(new AuditInterceptor())
.openSession();
public class PhoneNumberType implements UserType {
// Implement type conversion methods
}
@Entity
public class Contact {
@Type(type = "com.example.PhoneNumberType")
private PhoneNumber phoneNumber;
}
Query query = session.createStoredProcedureQuery("get_user_by_email")
.registerStoredProcedureParameter("email_param", String.class, ParameterMode.IN)
.setParameter("email_param", "john@example.com");
List<Object[]> results = query.getResultList();