我正在使用ebean运行一些问题(使用play framework 2 version 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执行DML bindLog []错误[Column&#39; graphId&#39;指定两次]
答案 0 :(得分:8)
在网络上的众多搜索者之后,我找到了这个答案here - 感谢jtal!
只是总结一下问题:
使用Ebean我做了一个@ManyToOne实体,无论如何都没有在数据库中实现, 甚至更多的连接字段,在我的情况下
graphId
是一个有效值的有效字段。
当尝试加入该字段上的列时,它将始终失败,因为它会创建此sql查询:
SELECT
*
FROM
Val;
select
t0.valId c0,
t0.graphId c1,
t0.Key c2,
t0.Value c3,
t0.graphId c4 <---- notice this duplicate
from
graph_val t0
为了解决这个问题,我告诉ebean 不要使用第二组属性。
我的新ebean元素如下所示:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="graphId", insertable = false, updatable = false)
private Graph valGraph;
它有效! =)