无法在JPA @Entity类中声明List属性,它指出“Basic”特性类型不应是容器

ecfsfe2w  于 2022-11-14  发布在  其他
关注(0)|答案(8)|浏览(475)

我有一个JPA@Entity class Place,其中的一些属性保存了关于某个地点的一些信息,例如地点的名称、描述和一些图像的URL。
对于图像的URL,我在实体中声明了一个List<Link>

但是,我收到此错误:
Basic attribute type should not be a container.
我试着删除@Basic,但是错误信息仍然存在。为什么它会显示这个错误?

hyrbngr7

hyrbngr71#

您也可以使用@ElementCollection

@ElementCollection
private List<String> tags;
oyt4ldly

oyt4ldly2#

You are most likely missing an association mapping (like @OneToMany ) and/or @Entity annotation(s).
I had a same problem in:

@Entity
public class SomeFee {
    @Id
    private Long id;
    private List<AdditionalFee> additionalFees;
    //other fields, getters, setters..
}

class AdditionalFee {
    @Id
    private int id;
    //other fields, getters, setters..
}

and additionalFees was the field causing the problem.
What I was missing and what helped me are the following:

  1. @Entity annotation on the generic type argument ( AdditionalFee ) class;
  2. @OneToMany (or any other type of association that fits particular business case) annotation on the private List<AdditionalFee> additionalFees; field.
    So, the working version looked like this:
@Entity
public class SomeFee {
    @Id
    private Long id;
    @OneToMany
    private List<AdditionalFee> additionalFees;
    //other fields, getters, setters..
}
    
@Entity
class AdditionalFee {
    @Id
    private int id;
    //other fields, getters, setters..
}
mrfwxfqh

mrfwxfqh3#

将列表类型的@basic更改为@OneToMany

9rygscc1

9rygscc14#

或者,如果它不存在于DB表中,您可以将其标记为@Transient

@Transient
private List<String> authorities = new ArrayList<>();
uqcuzwp8

uqcuzwp85#

正如 消息 所 述 , @Basic 不 应 用于 容器 ( 例如 Java 集合 ) 。 它 只能 用于 有限 的 基本 类型 列表 。 请 删除 该 字段 上 的 @Basic 注解 。
如果 如 您 在 问题 中 所说 , 错误 消息 仍然 存在 , 您 可能 需要 按 顺序 尝试 以下 步骤 :
1.储存 档案
1.关闭 并 重新 打开 文件
1.清理 并 重建 项目
1.重新 启动 IDE
( 这些 都 是 通用 步骤 , 当 IDE 生成 明显 没有 意义 的 编译 错误 时 , 我 会 使用 这些 步骤 。 )

ruarlubt

ruarlubt6#

当类缺少@Entity注解时也会发生这种情况。当你收到类似的奇怪警告时,有时候尝试编译看看编译器是否会抱怨会有帮助。

disho6za

disho6za7#

这个错误似乎对GAE没有影响,因为我可以运行应用程序并将数据存储到存储中。我猜这是IntelliJ IDEA中的一个错误,你可以简单地忽略它。

zzlelutf

zzlelutf8#

'Basic'属性类型不应该是容器
如果将现有实体声明为当前实体中的属性,而没有声明可能是任一JPA关系的关系类型,则会出现此错误。Detailed Article on JPA relationships

相关问题