相关疑难解决方法(0)

支持最终字段的Java持久性提供程序

我是Java的新手,但我一直在养成使用final的习惯,尽可能宣布不变性,我认为这是一件好事.(考虑f#)

我已经读过JPA不支持final字段.Hibernate,TopLink?我不确定这些,但我现在更喜欢JPA.

这在理论上是否可能 - 让我们通过反思说 - 在创建后修改最终字段?我的猜测是......不...

持久性解决方案当然可以支持带参数的构造函数.至少我认为没有理由会让这件事变得不可能.我猜,映射会有点棘手.这是一种替代解决方案.

建议?

编辑:我不熟悉不可变的确切定义,所以我直观地在这篇文章中使用它.在此声明不变性意味着声明无法更改字段.很抱歉对于这个误会.

java persistence

8
推荐指数
1
解决办法
3454
查看次数

作为实体的密封类

我对密封课程有疑问。如果我从 docker 运行我的应用程序,它工作得很好,但如果我在 IntelliJ 中执行相同的操作,我会遇到以下异常:

java.lang.IncompatibleClassChangeError: class com.nemethlegtechnika.products.model.Attribute$HibernateProxy$D0WxdNVz cannot inherit from sealed class com.nemethlegtechnika.products.model.Attribute

如果我使用抽象类而不是密封类,那么在 IntelliJ 和 Docker 中都不会出现错误。你们能帮我找到问题的根源吗?

提前致谢,祝您有美好的一天!:)

课程:
package com.nemethlegtechnika.products.model

import jakarta.persistence.*
import org.hibernate.annotations.DiscriminatorFormula

@Entity
@Table(name = "attribute")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("case when stringValues is not null then 'string' else 'boolean' end")
sealed class Attribute : BaseEntity() {

    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    @JoinColumn(name = "product_id")
    val product: Product? = null

    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    @JoinColumn(name = "group_id")
    val group: Group? = null

    abstract …
Run Code Online (Sandbox Code Playgroud)

spring hibernate kotlin docker sealed-class

5
推荐指数
1
解决办法
993
查看次数

实体类和final关键字

来自 另一个线程

根据定义,实体是一个可以持久化到数据库的类,因此在最终将成为数据库中的记录的上下文中,拥有最终字段是没有意义的。

有人可以详细说明为什么拥有最终字段没有意义吗?

java persistence entity final

0
推荐指数
1
解决办法
6859
查看次数

标签 统计

java ×2

persistence ×2

docker ×1

entity ×1

final ×1

hibernate ×1

kotlin ×1

sealed-class ×1

spring ×1