我有一个问题要问JPA / HibernateMaven:在我的应用程序中,我所有的实体都继承自一个“Base Intenty”,其中包含ID、cretedDate、Version以及应用程序所有实体共有的所有字段。
@MappedSuperclass
public class BaseEntity implements Serializable {
/**
* The constant serialVersionUID.
*/
private static final long serialVersionUID = 1L;
/**
* The Id.
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* The Created date.
*/
@Basic(optional = false)
@Column(columnDefinition = "TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP", name = "createddate")
@CreatedDate
@CreationTimestamp
@JsonIgnore
private ZonedDateTime createdDate;
/**
* The Updated date.
*/
@Basic(optional = false)
@Column(columnDefinition = "TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP", name = "updateddate")
@UpdateTimestamp
@LastModifiedDate
@JsonIgnore
private ZonedDateTime updatedDate;
/**
* The Version.
*/
@Version
@Column(columnDefinition = "INT DEFAULT 1")
@JsonIgnore
private Integer version;
/**
* The constant logger.
*/
static Logger logger = LogManager.getLogger(BaseEntity.class.getName());
/**
* Instantiates a new Base entity.
*/
public BaseEntity() {
}
[....]
}
但是碰巧其中一个实体(数据库的120个表中的一个)正在生成不必要的乐观锁异常,因为它是一个不应该需要@版本的表,所以我想添加:
@OptimisticLocking(type = OptimisticLockType.DIRTY)
@DynamicUpdate
这个特殊的实体。
我无法移除此类的BaseIntity继承,因为抽象JPA存储库需要扩展BaseEntity的类
@NoRepositoryBean interface CustomRepository<T extends BaseEntity, ID extends Serializable>
extends Repository<T, ID>, Serializable {
因此,我的问题是:
如果一个实体既有通过其父实体定义的@Version列,又有本地激活的@DynamicUpdate,Hibernate / JPA的行为会是什么?
会发生什么?我检查了它编译和运行良好,但在将这个版本投入生产之前,我想知道它是否会有副作用...
1条答案
按热度按时间jdgnovmf1#
您可以使用这种方法,但我建议您尝试摆脱这种限制模型,并将版本控制部分移到子类
VersionedBaseEntity
中。