我是Java的新手,但我一直在养成使用final的习惯,尽可能宣布不变性,我认为这是一件好事.(考虑f#)
我已经读过JPA不支持final字段.Hibernate,TopLink?我不确定这些,但我现在更喜欢JPA.
这在理论上是否可能 - 让我们通过反思说 - 在创建后修改最终字段?我的猜测是......不...
持久性解决方案当然可以支持带参数的构造函数.至少我认为没有理由会让这件事变得不可能.我猜,映射会有点棘手.这是一种替代解决方案.
建议?
编辑:我不熟悉不可变的确切定义,所以我直观地在这篇文章中使用它.在此声明不变性意味着声明无法更改字段.很抱歉对于这个误会.
我对密封课程有疑问。如果我从 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) java ×2
persistence ×2
docker ×1
entity ×1
final ×1
hibernate ×1
kotlin ×1
sealed-class ×1
spring ×1