首页 > 解决方案 > 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;
}

标签: hibernatecalculated-columnshibernate-annotations

解决方案


这种需求通常通过创建数据库触发器来解决。


推荐阅读