我正在研究我第一次使用GAE。
我有一个“Place”类,其中包含一些属性,这些属性包含一些地方的信息,例如地点名称,关于它的一点描述和一些图像URL。因此,我在类中声明并列出Link的泛型。但是,我得到了“Basic attribute type should not be a container
”。我尝试删除@Basic
,但错误消息仍然存在。
我记得在MySQL中我应该为图像设计另一个表,并基于placeId链接的位置和图像。我应该按照这种方式吗?
根据我从“Types and Property Classes”找到的内容,可以将List添加为属性,但我不知道为什么会显示错误消息。
===============
更新:我根据他的书Programming Google App Engine中提到的Dan Sanderson
设计了我的课程,第300页
答案 0 :(得分:8)
我知道,这是一个老问题,但是由于它仍然很重要,我将尽力帮助我解决问题。
您很可能会丢失关系(例如@OneToMany
)注释和/或@Entity
注释。
我在以下方面遇到了同样的问题
@Entity
public class SomeFee {
@Id
private Long id;
private String code;
private String name;
private List<AdditionalFee> additionalFees;
//getters, setters..
}
class AdditionalFee {
@Id
private int id;
//getters, setters..
}
additionalFees
是引起问题的字段。
我所缺少的是什么,对我有帮助的是:
@Entity
)类上的AdditionalFee
注释; @OneToMany
字段上的private List<AdditionalFee> additionalFees;
(或其他适合您情况的其他适当类型的关系)注释。@Entity
public class SomeFee {
@Id
private Long id;
private String code;
private String name;
@OneToMany
private List<AdditionalFee> additionalFees;
//getters, setters..
}
@Entity
class AdditionalFee {
@Id
private int id;
//getters, setters..
}
答案 1 :(得分:5)
您也可以使用@ElementCollection
:
@ElementCollection
private List<String> tags;
答案 2 :(得分:3)
将列表类型
更改为@basic
至@OneToMany
答案 3 :(得分:1)
正如消息所说,@Basic
不应该用于容器(例如Java集合)。它仅用于有限的基本类型列表。删除该字段上的@Basic
注释。
如果您在问题中说错误信息仍然存在,则可能需要按顺序尝试以下步骤:
(这些是通用步骤,我在IDE生成编译错误时使用这些步骤显然毫无意义。)
答案 4 :(得分:1)
当您的类缺少其@Entity注释时,也会发生这种情况。当您收到类似这些奇怪的警告时,有时尝试编译并查看编译器是否有抱怨会有所帮助。
答案 5 :(得分:0)
好的,错误似乎对GAE没有影响,因为我可以运行应用程序并将数据存储到存储中。我想这是Intellij Idea中的一个错误,你可以忽略它。
答案 6 :(得分:0)
或者如果它不存在于数据库表中,您可以将其标记为 @Transient
。
@Transient
private List<String> authorities = new ArrayList<>();