【问题标题】:OpenJPA Insert not using foreign keyOpenJPA插入不使用外键
【发布时间】:2013-01-23 13:45:45
【问题描述】:

我正在尝试围绕链接到 Mysql 数据库的 EJB / JPA 创建一个小项目。 我有两个表 FctData 和 RefKpiDataQuery 通过外键链接。

FctData:

public class FctData implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "DATA_ID")
    private Long dataId;

    ...

    @JoinColumn(name = "DATA_QUERY_REF", referencedColumnName = "KPI_DATA_QUERY_ID")
    @ManyToOne(cascade = CascadeType.ALL)
    private RefKpiDataQuery dataQueryRef;

RefKpiDataQuery :

public class RefKpiDataQuery implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "KPI_DATA_QUERY_ID")
    private Long kpiDataQueryId;

    ...

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "dataQueryRef")
    private Set<FctData> fctDataSet;

我有一个客户端试图在数据库中插入一个 FctData

RefKpiDataQuery refKpiDataQuery = new RefKpiDataQuery();
refKpiDataQuery.setKpiDataQueryId((long) 2);

FctData fctData = new FctData();
fctData.setDataQueryRef(refKpiDataQuery);

fctDataFacade.insert(fctData);

Facade 是一种 DAO。 这对没有 FK 的对象非常有效。

这是我在日志中遇到的错误:

Field 'DATA_QUERY_REF' doesn't have a default value {prepstmnt 7235700 INSERT INTO FCT_DATA(DATA_DATE, DATA_TIME, DATA_VALIDITY, DATA_VALUE, ISACTIVE, UPDATE_OWNER, UPDATE_TS) VALUES (?, ?, ?, ?, ?, ?, ?)

正如我们在我的插入中看到的,它从不谈论数据查询。 有人可以解释一下我错过了什么吗?我找不到我的错误。

感谢您的宝贵时间。 干杯

【问题讨论】:

  • 你试过在ManyToOne上设置optional = false吗?
  • 如果 RefKpiDataQuery 存在,您是否尝试过使用 em.find 来查找它,而不是使用该 pk 值创建一个空的 RefKpiDataQuery 实例?
  • 抱歉耽搁了。我终于通过删除所有 optional=false 来实现它,也不需要添加 cascade.ALL。谢谢

标签: java mysql sql jpa openjpa


【解决方案1】:

我终于把它全部删除了

@Basic(optional = false)

也不需要添加cascade = CascadeType.ALL

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2019-08-10
    • 2013-03-03
    • 2013-11-03
    • 2011-02-01
    • 2016-05-20
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多