如何使用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表中定义的外键值的记录,则不会抛出异常并且记录得到创建并插入数据库中。
答案 0 :(得分:2)
但是当我删除父键记录时,没有抛出异常,并且,如果尝试在订单表中插入记录,并且没有在Account表中定义的外键值,则不会抛出任何异常并且记录得到创建并插入数据库。
愚蠢的回答,但列定义不应该是:
integer references account(id) on delete cascade
我假设Account
表名为account
而不是document
。否则你的SQL看起来不错。
我会看看MySQL端的架构,以确保它符合您的期望。我还尝试从MySQL命令行插入一些插件,看看你是否可以弄清楚ORMLite之外发生了什么。
希望这有帮助。