【问题标题】:I have a problem when I use Value object with JPA将 Value 对象与 JPA 一起使用时出现问题
【发布时间】:2021-04-26 15:00:24
【问题描述】:

我必须在项目和JPA中同时使用ValueObject,但是将属性更改为valueobject时出现错误,我还不知道如何解决问题

这个错误:('Id' 属性类型不应该是'BrandCodigo')('Basic' 属性类型不应该是'BrandNombre')


@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity(name = "Brand")
@Table(name = "marcas",
        uniqueConstraints = {
                @UniqueConstraint(name = "uk_marcas_nombre",columnNames = "nombre")
        })
public class Brand {
    @Id
    @Column(name = "codigo")
    private BrandCodigo codigo;
    @Column(name = "nombre",
            nullable = false,
            columnDefinition = "varchar(80)"
    )
    private BrandNombre nombre;

}

【问题讨论】:

  • 您遇到了什么错误?
  • 'Id' 属性类型不应为 'BrandCodigo'
  • 您希望此对象模型采用哪种表结构?品牌是否会引用 BrandNombre 和 BrandCodigo 表 - 或者这些只是品牌表中的单个数据字段。如果是后者,您需要指定 JPA 将如何从您的值对象中提取相关数据;通过使其成为可嵌入的,告诉它什么是相关的,什么是不相关的。如果它们是表,则需要将它们设置为实体,并酌情使用 OneToOne 和 ManyToOne 引用映射。
  • 这两个是非表属性,只有那个属性是ValueObjects,我希望JPA把我读作ValueObject作为一个属性,我不会产生错误

标签: java spring jpa value-objects


【解决方案1】:

当您提到 lombok 的 @Value 时,这是不可能的。 Lombok 的 @Value 用于不可变对象。

但是您的实体需要是可变的,因为 JPA 构造它的方式。

此外,值对象没有身份,但数据库实体应该有主键。

【讨论】:

  • 如果我删除 ID 标签 (@id) 我会得到另一个错误,基本上是 'id' 是必要的
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2023-04-07
相关资源
最近更新 更多