【发布时间】:2014-06-28 07:52:32
【问题描述】:
我在使用 ebean 时遇到了一些问题(使用 play framework 2 版本 2.2.1) 我有两个班级:
我的图表类:
public class Graph extends Model {
@Id
@Column(name="id")
private String id;
@Column(name="type")
private String type;
@OneToMany(mappedBy="valGraph", cascade=CascadeType.ALL)
private List<Val> valItems;
和我的值类(带有 Val.graphId 外键 Graph.id):
public class Val extends Model
@Id
@Column(name="valId")
private String valId;
@Id
@Column(name="graphId")
private String graphId;
@Column(name="Key")
private String Key;
@Column(name="Value")
private String Value;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="graphId")
private Graph valGraph;
但在尝试保存新项目时出现此错误:
javax.persistence.PersistenceException: ERROR execution DML bindLog[] 错误[列'graphId'指定了两次]
【问题讨论】:
-
这是this issue 的副本。 IE。您的
@Column(name="graphId")和@JoinColumn(name="graphId")具有相同的名称。换一个。 -
Donovan,感谢您的快速回答,我通过更改“@Column(name="graphId")”得到了以下内容:查询已抛出SQLException:字段列表中的未知列 't0.graphId1' 并通过更改 '@JoinColumn(name="graphId")' 我得到:javax.persistence.PersistenceException 未知列 'graphId1' 我在这里不明白什么?
-
您在哪个数据库上测试(H2、MySQL 等)?您是否应用进化来重新创建/更新表?听起来您已经更改了实体,但您的数据库架构尚未相应更新。
-
您的
valGraph属性将由 Ebean 在 MySQL 中的graphId列表示。但是,您已经定义了自己的private String graphId。所以你混淆了Ebean。我已经更详细地解释了这一点in this issue。请记住,您应该考虑对象而不是 SQL,让持久性框架来完成它的工作。在您的情况下,我将删除您的graphId属性。你不需要它。
标签: java playframework-2.0 one-to-many ebean many-to-one