如何在@EntityListeners调用期间查找已更改的字段

时间:2016-01-27 13:36:35

标签: java hibernate jpa entitylisteners

我们假设我有这门课程:

Intent innerIntent = new Intent(context, MainActivity.class);
PendingIntent notificationPendingIntent = PendingIntent.getActivity(context, 0, innerIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Intent dismissIntent = new Intent(context, ExitService.class);
PendingIntent piDismiss = PendingIntent.getService(context, 0, dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT);

android.support.v4.app.NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(context)
                .setSmallIcon(R.mipmap.ic_launcher) 
               .setContentTitle(context.getString(R.string.app_name))
                  .setContentText(context.getString(R.string.ongoing_short_text))
                .setCategory(Notification.CATEGORY_SERVICE)
                .setPriority(Notification.PRIORITY_MAX)
                .setVisibility(Notification.VISIBILITY_PRIVATE)
                .setContentIntent(notificationPendingIntent)
                .setAutoCancel(true)
                .setOnlyAlertOnce(true)
                .setLights(context.getResources().getColor(R.color.primary), 50, 10000)            .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                .setVibrate(new long[]{0, 50})
                .setOngoing(true)
                .setStyle(new NotificationCompat.BigTextStyle().bigText(context.getString(R.string.ongoing_long_text)))
                .addAction(R.mipmap.ic_stop, context.getString(R.string.dismiss), piDismiss);

int mNotificationId = ONGOING_NOTIFICATION_ID;
NotificationManager mNotifyMgr = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
mNotifyMgr.notify(mNotificationId, mBuilder.build());

MyListener类将看起来:

@EntityListeners({MyListener.class})
class MyClass {
  String name;
  String surname;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name; 
  }

  public String getSurname() {
    return name;
  }

  public void setSurname(String name) {
    this.name = name; 
  }
}
MyListener类中的

onPostPersist()方法将在更改MyClass实例字段时被调用。

是否可以发现因特定字段更改而调用此方法?

例如: 如果我单独更改名称字段,我应该能够找到姓名字段在最后一次持续更改。

通过与审核进行比较来检查的一种方法。

我想了解更改方法(如果有的话)。

由于

1 个答案:

答案 0 :(得分:1)

您所描述的仅对更新事件有意义。您可以注册interceptor并在覆盖的onFlushDirty方法中监听更改:

onFlushDirty(Object entity,
             Serializable id,
             Object[] currentState,
             Object[] previousState,
             String[] propertyNames,
             Type[] types)

这里有先前和当前状态的数组以及一系列属性,因此您可以轻松找到更改的内容。