Java 使用ORM Lite在数据库中存储自定义对象的arraylist
我有对象Guild.class和GuildMember.class。我需要在公会中存储公会成员的ArrayList,并使用ORM Lite将其处理到数据库中。在示例代码中,我找到了注释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;
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;