GreenDao генерирует конструктор с идентификатором, когда задано автоматическое увеличение
Кажется очень странной проблемой при попытке создать DAO для сущности, в которой идентификатор указан как автоинкремент.
Мой код:
private static Entity addSearch(Schema schema) {
Entity search = schema.addEntity("Search");
search.addIdProperty().primaryKey().autoincrement();
search.addStringProperty("title").notNull();
search.addIntProperty("type");
search.addIntProperty("timestamp");
return search;
}
и сгенерированный файл DAO:
public class Search {
private Long id;
/** Not-null value. */
private String title;
private Integer type;
private Integer timestamp;
// KEEP FIELDS - put your custom fields here
// KEEP FIELDS END
public SearchData() {
}
public SearchData(Long id) {
this.id = id;
}
public SearchData(Long id, String title, Integer type, Integer timestamp) {
this.id = id;
this.title = title;
this.type = type;
this.timestamp = timestamp;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/** Not-null value. */
public String getTitle() {
return title;
}
/** Not-null value; ensure this value is available before it is saved to the database. */
public void setTitle(String title) {
this.title = title;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getTimestamp() {
return timestamp;
}
public void setTimestamp(Integer timestamp) {
this.timestamp = timestamp;
}
// KEEP METHODS - put your custom methods here
// KEEP METHODS END
}
Так как я определил идентификатор как автоинкремент, почему он генерирует конструктор с аргументом id? В этом смысл автоинкремента, так что вам не нужно указывать его самостоятельно.
Какие-либо предложения?
1 ответ
Решение
Я на более старой версии Greendao, так что возьми это с крошкой соли. Автоинкремент выполняется только тогда, когда вы фактически вставляете его в базу данных. Сначала конструктор - это просто объект в памяти. Идентификатор в этой точке должен быть нулевым, если вы еще этого не знаете. После того, как вы вставите объект, вы можете прочитать его реальный идентификатор.