当前位置: 首页 > 知识库问答 >
问题:

如何定义多个实体?

秦昊穹
2023-03-14
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            database.execSQL("CREATE TABLE IF NOT EXISTS `invoice` (`invoice_id` VARCHAR, "
                    + "`terminal_no` VARCHAR NOT NULL, `cashier_name` TEXT,  PRIMARY KEY(`invoice_id`))");
        }
    };
Room.databaseBuilder(context.getApplicationContext(),
                                    POSDatabase.class,
                                 "pos_database").addMigrations(MIGRATION_1_2).build();
package com.example.qrreceipt;

import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "item")
public class Item {
    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "item_id")
    private String item_id;

    @ColumnInfo(name = "description")
    private String description;

    @ColumnInfo(name = "price")
    private double price;

    public Item() { }

    @NonNull
    public String getItem_id() {
        return item_id;
    }

    public String getDescription() {
        return description;
    }

    public double getPrice() {
        return price;
    }

    public void setItem_id(@NonNull String item_id) {
        this.item_id = item_id;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

itemdao.java

package com.example.qrreceipt;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

@Dao
public interface ItemDao {
    @Insert
    void insertItem(Item item);

    @Update
    void updateItem(Item item);

    @Query("SELECT * FROM item WHERE item_id = :item_id")
    List<Item> findItem(String item_id);

    @Query("SELECT * FROM item")
    List<Item> getAllItems();

    @Query("DELETE FROM item WHERE item_id = :item_id")
    void deleteItem(String item_id);
}

posDatabase.java

package com.example.qrreceipt;

import android.content.Context;

import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;

@Database(entities = {Item.class, Invoice.class}, version = 2, exportSchema = false)
public abstract class POSDatabase extends RoomDatabase {
    public abstract ItemDao getItemDAO();
    public abstract InvoiceDao getInvoiceDAO();

    private static POSDatabase INSTANCE;

    static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            database.execSQL("CREATE TABLE IF NOT EXISTS `invoice` (`invoice_id` VARCHAR, "
                    + "`terminal_no` VARCHAR NOT NULL, `cashier_name` TEXT,  PRIMARY KEY(`invoice_id`))");
        }
    };

    static POSDatabase getDatabase(final Context context) {
        if (INSTANCE == null) {
            synchronized (POSDatabase.class) {
                if (INSTANCE == null) {
                    INSTANCE =
                            Room.databaseBuilder(context.getApplicationContext(),
                                    POSDatabase.class,
                                 "pos_database").addMigrations(MIGRATION_1_2).build();

                }
            }
        }
        return INSTANCE;
    }
}

invoice.java

package com.example.qrreceipt;

import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "invoice")
public class Invoice {
    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "invoice_id")
    private String invoice_id;

    //private Date date;

    @ColumnInfo(name = "terminal_no")
    private String terminal_no;

    @ColumnInfo(name = "cashier_name")
    private String cashier_name;

    public Invoice() { }

    @NonNull
    public String getInvoice_id() {
        return invoice_id;
    }

    public String getTerminal_no() {
        return terminal_no;
    }

    public String getCashier_name() {
        return cashier_name;
    }

    public void setInvoice_id(@NonNull String invoice_id) {
        this.invoice_id = invoice_id;
    }

    public void setTerminal_no(String terminal_no) {
        this.terminal_no = terminal_no;
    }

    public void setCashier_name(String cashier_name) {
        this.cashier_name = cashier_name;
    }
}
package com.example.qrreceipt;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

@Dao
public interface InvoiceDao {
    @Insert
    void insertInvoice(Invoice invoice);

    @Update
    void updateInvoice(Invoice invoice);

    @Query("SELECT * FROM invoice WHERE invoice_id = :invoice_id")
    List<Item> findInvoice(String invoice_id);

    @Query("SELECT * FROM invoice")
    List<Item> getAllInvoices();

    @Query("DELETE FROM invoice WHERE invoice_id = :invoice_id")
    void deleteInvoice(String invoice_id);
}

错误:错误:查询返回的列在com.example.qrreceipt.Item中没有字段[item_id,price],即使它们被注释为非空或原语。查询返回的列:[invoice_id,terminal_no,cashier_name]

共有1个答案

孟彦
2023-03-14

您当前的问题是,您正试图从发票表中获取项目。

这就是下面所说的:-

错误:查询返回的列在com.example.qrreceipt.Item中没有字段[item_id,price],即使它们被注释为非空或原语。查询返回的列:[invoice_id,terminal_no,cashier_name]

@Query("SELECT * FROM invoice WHERE invoice_id = :invoice_id")
List<Invoice> findInvoice(String invoice_id);


@Query("SELECT * FROM invoice")
List<Invoice> getAllInvoices();
    null

使用:-

database.execSQL("CREATE TABLE IF NOT EXISTS `invoice` (`invoice_id` TEXT NOT NULL, "
                + "`terminal_no` TEXT NOT NULL, `cashier_name` TEXT,  PRIMARY KEY(`invoice_id`))");

连同:-

@Entity(tableName = "invoice")
public class Invoice {
    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "invoice_id")
    private String invoice_id;

    //private Date date;

    @NonNull
    @ColumnInfo(name = "terminal_no")
    private String terminal_no;

    @ColumnInfo(name = "cashier_name")
    private String cashier_name;

    public Invoice() { }

    @NonNull
    public String getInvoice_id() {
        return invoice_id;
    }

    public String getTerminal_no() {
        return terminal_no;
    }

    public String getCashier_name() {
        return cashier_name;
    }

    public void setInvoice_id(@NonNull String invoice_id) {
        this.invoice_id = invoice_id;
    }

    public void setTerminal_no(String terminal_no) {
        this.terminal_no = terminal_no;
    }

    public void setCashier_name(String cashier_name) {
        this.cashier_name = cashier_name;
    }
}

应该管用。

 类似资料:
  • 我定义了多个记录器,如下所示(com.xyz和org.xyz)。Log4j2忽略了第一个记录器定义,只加载第二个。在示例中,org.xyz未加载。 在log4j2调试消息下方查找。 我的配置正确吗?

  • 问题内容: jQuery是否有任何语法方法来定义多个CSS属性,而无需像这样将所有内容都放在右边: 如果您有20条这样的代码,那么您将很难阅读,有什么解决方案吗? 例如,通过jQuery API,jQuery可以理解并返回正确的值 和 请注意,对于DOM表示法,属性名称周围的引号是 可选的 ,但对于CSS表示法,由于名称中的连字符,因此 必须 使用引号。 问题答案: 即使您有1个或更多,也最好只使

  • 我们正在使用PACT库进行合同测试。当前项目依赖于junit5集成。我必须扩展一个测试,使用2个提供者,而不是1: 当前版本: 我查看了发布说明,没有发现任何更新。是否有其他方法如何定义另一个提供程序?如: 或者在这种情况下junit5集成不是一个好的选择?

  • 我需要实现我的自定义DefaultComboxModel。这样做的原因是每次我打电话给 或者 或者 我看到它自动触发一个项目状态更改事件。这会导致一些随机项目自动从列表中选择。这不是我想要的,因为它用随机选择的项目填充可编辑的JTextField。 这是我在使用我的自定义Itemlistener中的Thread.dumpStack()进行调试时看到的stacktrace,它是我在调用上述方法时看到

  • 类是用于描述事物的的属性和行为的,而 Go 语言中的结构体正好可以用于描述事物的属性和行为 所以在 Go 语言中我们使用结构体来定义一个类型 type Person struct { name string // 人的属性 age int // 人的属性 } // 人的行为 func (p Person)Say() { fmt.Println("my name