ORMlite + MySQL外键绑定

时间:2013-12-24 10:13:53

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

如何使用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表中定义的外键值的记录,则不会抛出异常并且记录得到创建并插入数据库中。

1 个答案:

答案 0 :(得分:2)

  

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

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

integer references account(id) on delete cascade

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

我会看看MySQL端的架构,以确保它符合您的期望。我还尝试从MySQL命令行插入一些插件,看看你是否可以弄清楚ORMLite之外发生了什么。

希望这有帮助。