【发布时间】:2019-02-07 00:36:59
【问题描述】:
所以我的数据库正在使用一个网站实体
@Entity(tableName = "website_table") public class Website {
@NonNull
@PrimaryKey(autoGenerate = true)
private Integer websiteId;
private String title;
private String base_URL;
private String description;
public Website(String title, String base_URL) {
this.title = title;
this.base_URL = base_URL;
}
public void setWebsiteId(Integer websiteId) {
this.websiteId = websiteId;
}
public Integer getWebsiteId() {
return websiteId;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getBase_URL() { return base_URL; }
public void setBase_URL(String base_URL) { this.base_URL = base_URL; }
}
@Dao
public interface WebsiteDao {
@Insert
void insert(Website website);
@Update
void update(Website website);
@Delete
void delete(Website website);
@Query("DELETE FROM website_table")
void deleteAllWebsites();
@Query("SELECT * FROM website_table ORDER BY title DESC")
LiveData<List<Website>> getAllWebsites();
@Query("SELECT * FROM website_table")
public List<WebsiteWithWebPages> loadWebsitesWithWebPages();
}
然后我尝试为网站上的网页添加关系
public class WebsiteWithWebPages {
@Embedded
public Website website;
@Relation(parentColumn = "websiteId", entityColumn = "website_Id",
entity = WebPage.class)
public List<WebPage> webPageList;
}
@Entity(tableName = "webpage_table")
public class WebPage {
@PrimaryKey(autoGenerate = true)
public Integer webPageId;
public final String name;
public final String url;
public String description;
public final Integer website_Id;
public WebPage(String name, String url, final Integer website_Id) {
this.name = name;
this.url = url;
this.website_Id = website_Id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getName() {
return name;
}
public String getUrl() {
return url;
}
public Integer getWebsiteId() {
return website_Id;
}
}
当我尝试使用我的网站 Dao 添加网站时,例如使用命令
Website website= new Website("website name", "websiteurl");
websiteDao.insert(website);
我的应用崩溃了。创建的每个网站都被赋予 0 的 id,并且 FOREIGN KEY 约束失败。这里出了什么问题?我将primarykey从int更改为INTEGER,当我这样做时,它将主键设置为null,当primarykey为int时,它将id设置为0。这是怎么回事?
【问题讨论】:
-
将主键数据类型从 Integer 更改为 int 并检查,它应该可以工作
-
@pinakin 就是这样,不是。在它停止工作后,我已经改为整数。我的代码适用于一个实体的 int 主键。当我添加第二个实体时,我现在面临一个外键约束失败,因为所有自动生成的 ID 都是 0。
标签: android mysql android-room