使用Spring JPA Save 方法注意

2020-02-03  本文已影响0人  暗夜行者

无论是实现功能较基本的CrudRepository接口 或者 可以提供分页等复杂操作的JpaRepository接口,所调用的save方法都是save+merge的功能。
需要注意若是一次更新操作,新传入的实体中有字段是null也将覆盖原有的数据,将原有的数据更新为null。
更新操作切记检查每个值包括Null覆盖的情况。

拓展学习: ReentrantReadWriteLock 可重入读写锁,分为读锁和写锁,使用举例(摘自官方实现源码):
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
private final Lock read = lock.readLock();
private final Lock write = lock.writeLock();

public E getPersistentEntity(TypeInformation<?> type) {

    Assert.notNull(type, "Type must not be null!");

    try {

        read.lock();

        Optional<E> entity = persistentEntities.get(type);

        if (entity != null) {
            return entity.orElse(null);
        }

    } finally {
        read.unlock();
    }

    if (!shouldCreatePersistentEntityFor(type)) {

        try {
            write.lock();
            persistentEntities.put(type, NONE);
        } finally {
            write.unlock();
        }

        return null;
    }

    if (strict) {
        throw new MappingException("Unknown persistent entity " + type);
    }

    return addPersistentEntity(type).orElse(null);
}
上一篇下一篇

猜你喜欢

热点阅读