gpt4 book ai didi

sqlite - 如果使用 Ebean ManyToOne 关系,数据库表会是什么样子?

转载 作者:行者123 更新时间:2023-12-03 19:52:02 24 4
gpt4 key购买 nike

我在 Play 2 框架中使用 Ebean。两者对我来说都很新。我有两个型号AlgorithmSolution . (一个 Algorithm 可以拥有多个 Solution s。)

@Entity
public class Algorithm extends Model{

@Id
public Long id;

@Required
public String name;

public String description;

@OneToMany(mappedBy="algorithm", cascade=CascadeType.ALL)
public List<Solution> solutions;

...
}


@Entity
public class Solution extends Model {

@Id
public Long id;

@Required
public String explanation;
public String code;

@ManyToOne (cascade=CascadeType.ALL)
public Algorithm algorithm;

// **** I added it because the error message said algorithm_id is missing!!
public Long algorithm_id;

...
}

我正在使用 sqlite3,两个表算法和解决方案的架构是:
CREATE TABLE algorithm(id INTEGER primary key, name varchar(255), description varchar(255));


CREATE TABLE "solution"(id INTEGER primary key, explanation varchar(255), code varchar(255), algorithm_id INTEGER);

所以在我的 Solution型号,我原来没有 public Long algorithm_id;这行. 问题是当我试图创建一个新的 Algorithm例如,游戏框架提示我错过了一个专栏 algorithm_id在表中 solution .所以我在模型定义和数据库表中手动添加了 algorithm_id 以使错误消息消失。但是,ebean 的级联保存似乎没有按预期工作:algorithm_id 列永远不会被 ebean 自动填充。它总是空的。换句话说,解决方案实体和算法实体在数据库中没有连接。

所以我的问题是:
  • 我应该在模型和数据库中手动添加 algorithm_id 吗?如果没有,如何使 algorithm_id 自动生成?
  • 在我的情况下,我的模型和数据库表模式应该是什么样的?

  • 谢谢。

    最佳答案

    删除 algorithm_id模型中的字段,当您添加 public Algorithm algorithm - Ebean 应该在 DB 中创建名为 algorithm_id 的列但你不应该在模型中手动复制它。

    当然,如果您启用了 ebean 插件,它会起作用,如果您手动进行更改,请添加 algorithm_id列到您的solution table 。

    提示

    如果您不能和/或不想使用其他数据库引擎,请花一些时间使用 Ebean 插件支持的一些数据库 - 例如 MySQL 或 Postgres - 您将能够使用免费的 GUI 轻松检查它。创建一些用于测试目的的裸项目,创建几个具有不同方向关系的模型,并检查 Ebean 如何创建表、列、索引、约束等。保留此项目以供引用。

    关于sqlite - 如果使用 Ebean ManyToOne 关系,数据库表会是什么样子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16008550/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com