hibernate - Hibernate - 如何在数据库端持久化计算列
问题描述
有人可以帮我确定一个解决方案,这将允许我在插入时计算列的值。
我尝试过使用@Formula 和@Genarated 的不同组合。这甚至可能吗?如果是这样,持久化计算列的替代方法是什么?
我的持久层由 JpaRepository 管理
@SpringBootTest
@EnableTransactionManagement
@TestPropertySource("classpath:config/application-integrationtest.properties")
class CompetitorRepositoryItTest {
@Autowired
private CompetitorRepository competitorRepository;
@Test
@Transactional(transactionManager = "defaultTransactionManager")
void createPartToContract() {
Competitor competitor = this.createCompetitor(firstName,lastName, ...);
return this.CompetitorRepository.save(competitor);
}
}
我的课 :
public class Competitor {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Generated(GenerationTime.INSERT)
@Formula("(SELECT (COALESCE(MAX(rank), 0)+ 1) from Competitor c WHERE c.id = id)")
@Column(name = "rank", insertable = true, updatable = false)
private int rank;
}
解决方案
这种需求通常通过创建数据库触发器来解决。
推荐阅读
- amazon-web-services - AWS CodeBuild 和 CodeCommit 存储库作为 npm 依赖项
- android - 如何防止 EditText 中第一个单词的空格?可以在xml不是代码吗?
- c# - 在我们的应用程序中拍摄的照片上添加徽标,例如 B612 相机应用程序
- java - 无法在 Spring MVC 测试中自动装配 sessionFactory
- git - 即使没有冲突,如何防止 git merge 或 git rebase 更改指定文件?
- sql - 部分设置plsql参数
- javascript - 谷歌地图街景捕获无法使用 html2canvas
- android - 有没有办法在某个位置用不同的颜色标记 ProgressBar 或 SeekBar,就像“Youtube”广告标记一样?
- c# - GhostscriptRasterizer.PageCount 始终返回零
- scala - 如何在加特林持续时间规范中使用变量?