【问题标题】:ORMlite + MySQL Foreign Key BindingORMlite + MySQL 外键绑定
【发布时间】:2013-12-24 10:13:52
【问题描述】:

如何使用 ORMLite 创建自动删除级联?我正在使用 ormlite-core 和 omlite-jdbc 4.8 版。我试过了

public class Account {

    // for QueryBuilder to be able to find the fields
    public static final String NAME_FIELD_NAME = "name";
    public static final String PASSWORD_FIELD_NAME = "passwd";

    @DatabaseField(generatedId = true)
    private int id;

    @DatabaseField(columnName = NAME_FIELD_NAME, canBeNull = false)
    private String name;

    @DatabaseField(columnName = PASSWORD_FIELD_NAME)
    private String password;
}

和另一个班级

@DatabaseTable(tableName = "orders")
public class Order {

    public static final String ACCOUNT_ID_FIELD_NAME = "account_id";

    @DatabaseField(generatedId = true)
    private int id;

    @DatabaseField(foreign = true, columnName = ACCOUNT_ID_FIELD_NAME,
         canBeNull = false,index = true, foreignAutoRefresh = true,
         columnDefinition = "integer references document(id) on delete cascade")
    private Account account;

    @DatabaseField
    private int itemNumber;

    @DatabaseField
    private int quantity;

    @DatabaseField
    private float price;
}

但是当我删除父键记录时,不会引发异常,而且,如果尝试在订单表中插入具有未在 Account 表中定义的外键值的记录,则不会引发异常并且记录得到创建并插入数据库。

【问题讨论】:

    标签: java mysql sql foreign-key-relationship ormlite


    【解决方案1】:

    但是当我删除父键记录时,不会引发异常,而且,如果尝试在订单表中插入具有未在 Account 表中定义的外键值的记录,则不会引发异常并且记录得到在数据库中创建并插入。

    愚蠢的答案,但列定义不应该是:

    integer references account(id) on delete cascade
    

    我假设Account 表名为account 而不是document。否则你的 SQL 看起来不错。

    我会查看 MySQL 端的模式,以确保它与您的期望相匹配。我还会尝试从 MySQL 命令行插入一些内容,看看你是否能弄清楚 ORMLite 之外发生了什么。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多