所以我的数据库和一个网站实体一起工作
@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);
我的应用程序崩溃了。创建的每个网站的id为0,外键约束失败。这里出了什么问题?我将primarykey从int更改为INTEGER,当我这样做时,它将主键设置为null,当primarykey为int时,它将id设置为0。发生什么事了?
解决了的。最后我重拨了我的密码。这一次,我从https://github.com/Pavneet-Sing/RoomDemo/blob/master/app/src/main/java/com/example/pavneet_singh/roomdemo/AddNoteActivity.java
具体来说,对于'Insert'异步任务的DoInBackground,有以下代码`
protected Boolean doInBackground(Void... objs) {
// retrieve auto incremented note id
long j = activityReference.get().noteDatabase.getNoteDao().insertNote(note);
note.setNote_id(j);
Log.e("ID ", "doInBackground: "+j );
return true;
}
通过让插入刀方法返回长时间
@Insert
long insertNote(Note note);
数据库按预期正确自动分配ID。如果一次添加多个注释,也要按照添加注释的顺序进行记录。在这种情况下,不会设置ID,因为每次对数据库的insert调用都会创建一个异步方法。所以我所做的就是添加一个。在每次异步调用之后获取(),以确保所有内容都正确地按时设置
我遇到了一个问题,我找不到任何关于Android空间和自动生成主键的文档。 我有一个实体类,看起来有点像这样: 当我手动设置id时,这是正常的,但是当我不设置主键时,我得到一个关于主键为空的错误。看着自动生成的文件,我看不到它会自动增加主键的任何地方。 所以我想我的问题是:你能用setter自动生成私有成员的主键吗,或者我需要在setter中手动自动生成我的键吗?
问题内容: 我的主键实体如下所示 当我跑步时,出现错误 无法获取或更新下一个值;嵌套的异常是org.hibernate.exception.SQLGrammerException:无法获取或更新下一个值 但是当我改变为 没有错误抛出。我想在 oracle db 上为每个表生成唯一的主键。 问题答案: 当将新创建的实体插入数据库时,告诉JPA提供者使用表从中获取ID。 当使用Hibernate作为提
问题内容: 我有一个SQL语句,例如: 一旦成功,我需要返回自动生成的ID(INT主键),以便可以在第二条语句中使用它。 这可能吗?请提供一个例子。 问题答案: 像这样:
下面的奇怪问题是代码示例,无法创建复合主键 破例 不确定哪里的问题是一切看起来都很好,但当我删除主键注释,这个例外不会出现,对于语法,我遵循官方Android留档。也没有给出有关问题位置的任何详细信息。
我正在使用mySQL数据库,该表有一个由数据库引擎生成的UUID格式的主键。我使用Spring framework JdbcTemplate(https://docs.Spring.io/Spring/docs/current/javadoc-api/index.html?org/springframework/jdbc/core/JdbcTemplate.html)来执行所有操作。但是在插入时,