我遇到了 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:执行 DML bindLog[] 错误[列“graphId”指定两次]
经过网络上的大量搜索,我找到了这个答案here https://github.com/ebean-orm/avaje-ebeanorm/issues/61- 感谢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;
它有效! =)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)