Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ORM Lite在数据库中存储自定义对象的arraylist_Java_Database_Ormlite - Fatal编程技术网

Java 使用ORM Lite在数据库中存储自定义对象的arraylist

Java 使用ORM Lite在数据库中存储自定义对象的arraylist,java,database,ormlite,Java,Database,Ormlite,我有对象Guild.class和GuildMember.class。我需要在公会中存储公会成员的ArrayList,并使用ORM Lite将其处理到数据库中。在示例代码中,我找到了注释ForeignCollectionField,但它似乎工作不正常 Guild.java package skymine.redenergy.clansreloaded.server.entities; import java.util.ArrayList; import java.util.Collection;

我有对象Guild.class和GuildMember.class。我需要在公会中存储公会成员的ArrayList,并使用ORM Lite将其处理到数据库中。在示例代码中,我找到了注释
ForeignCollectionField
,但它似乎工作不正常

Guild.java

package skymine.redenergy.clansreloaded.server.entities;

import java.util.ArrayList;
import java.util.Collection;
import java.util.UUID;

import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "guilds")
public class Guild {

    @DatabaseField(id = true)
    private UUID uid;

    @DatabaseField(canBeNull = false)
    private String title;

    @ForeignCollectionField
    public Collection<GuildMember> players;

    public Guild(){}

    public Guild(String title){
        this.title = title;
        this.uid = UUID.randomUUID();
        this.players = new ArrayList<GuildMember>();
    }

    public Collection<GuildMember> getPlayers(){
        return players;
    }

    public void addPlayer(GuildMember player){
        this.players.add(player);
    }

    public String getTitle(){
        return title;
    }

    public Guild setTitle(String newTitle){
        this.title = newTitle;
        return this;
    }

    public UUID getUUID(){
        return uid;
    }
}
因此,我得到了

java.sql.SQLException: Foreign collection class skymine.redenergy.clansreloaded.server.entities.GuildMember for field 'players' column-name does not contain a foreign field of class skymine.redenergy.clansreloaded.server.entities.Guild
    at com.j256.ormlite.field.FieldType.findForeignFieldType(FieldType.java:1020)
    at com.j256.ormlite.field.FieldType.configDaoInformation(FieldType.java:390)
    at com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:201)
    at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:128)
    at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:107)
    at com.j256.ormlite.dao.BaseDaoImpl$4.<init>(BaseDaoImpl.java:907)
    at com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:907)
    at com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:70)
    at skymine.redenergy.clansreloaded.server.ClanManager.initDatabase(ClanManager.java:23)
    at skymine.redenergy.clansreloaded.ClanManagerTest.<init>(ClanManagerTest.java:36)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
java.sql.SQLException:字段“players”列名的外部集合类skymine.redenergy.clansreload.server.entities.GuildMember不包含类skymine.redenergy.clansreload.server.entities.Guild的外部字段
位于com.j256.ormlite.field.FieldType.findForeignFieldType(FieldType.java:1020)
在com.j256.ormlite.field.FieldType.configDaoInformation上(FieldType.java:390)
位于com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:201)
位于com.j256.ormlite.dao.BaseDaoImpl.(BaseDaoImpl.java:128)
位于com.j256.ormlite.dao.BaseDaoImpl.(BaseDaoImpl.java:107)
位于com.j256.ormlite.dao.BaseDaoImpl$4。(BaseDaoImpl.java:907)
位于com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:907)
位于com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:70)
位于skymine.redenergy.clansreload.server.ClanManager.initDatabase(ClanManager.java:23)
在skymine.redenergy.clansreload.ClanManagerTest.(ClanManagerTest.java:36)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
位于org.junit.runners.BlockJUnit4ClassRunner$1.runReflectCall(BlockJUnit4ClassRunner.java:266)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
位于org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:363)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

希望-这将帮助您:

查看自述文件并检查类顺序及其外部参数,即:

    @DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = ACCOUNT_ID_FIELD_NAME)
    private Account account;
…好像是你的案子

    @DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = ACCOUNT_ID_FIELD_NAME)
    private Account account;