hibernate - 如果版本为空,则弹簧数据(休眠)防止使用任何 CascadeType 对惰性 ManyToOne 对象进行编辑
问题描述
我有这个对象在保存之前在休眠状态下是瞬态的,我从休息服务中得到它:
@Entity
@Table(name = "SWC_EXCEPTION_MAPPING")
public class ExceptionMapping extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EXCEPTION_MAPPING_SEQ")
@SequenceGenerator(sequenceName = "EXCEPTION_MAPPING_SEQ", allocationSize = 1, name = "EXCEPTION_MAPPING_SEQ")
private Long id;
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
private Supplier supplier;
}
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity implements Serializable {
@CreatedDate
@Column(name = "CREATED_DATE", updatable = false, nullable = false)
private Date createdDate;
@Version
@NotNull
private Integer version;
}
当我尝试使用此代码保存带有弹簧数据的对象时,出现此错误:
代码:
@Repository
public interface ExceptionMappingRepository extends JpaRepository<ExceptionMapping, Long> {
}
@Service
public class ExceptionMappingServiceImpl implements ExceptionMappingService {
private final ExceptionMappingRepository exceptionMappingRepository;
private final ExceptionMappingCustomRepository exceptionMappingCustomRepository;
private final SupplierService supplierService;
public ExceptionMappingServiceImpl(ExceptionMappingRepository exceptionMappingRepository) {
this.exceptionMappingRepository = exceptionMappingRepository;
}
public void edit(ExceptionMapping exceptionMapping) {
/* this line */
exceptionMappingRepository.save(exceptionMapping);
}
}
非空属性引用瞬态值 - 瞬态实例必须在当前操作之前保存:ExceptionMapping.supplier -> Supplier
我知道此错误发生在供应商版本为空时,因为当我手动将其设置为零时,此错误不会出现!
我的问题是,为什么supplier
我没有为此设置任何 CascadeType 时在对象中休眠检查版本?
我使用这个版本的弹簧靴:2.3.12.RELEASE
解决方案
因为你说Supplier extends BaseEntity
,我猜这version
是强制性的。
对于分离的实例,版本或时间戳属性永远不能为空。
这就是你得到错误的原因。
推荐阅读
- r - 如何在 R 中按组计算每个观察的学生化残差?
- javascript - SVG 路径返回 null 并且不可能有事件监听器
- directory - 如何在我的颤振项目中找到 web 文件夹?
- html - 将表格标题与表格左侧对齐
- php - 正则表达式无效的 URL,我的正则表达式规则有什么问题?
- json - Jackson - 如何限制科学记数法值反序列化?
- android - 我可以使用 MPAndroidChart 在 Yaxis 上设置不同大小的间隔吗?
- python - 我可以用更少的代码行将 pandas 数据集转换为每个 WorkItemCnt 一行吗?
- android - 将地图存储在房间数据库中
- c# - 在 WPF 中,当我按下按钮时,会执行另一个事件按钮