別の問題を見つけるために、私のテストでは以下のコードを使用しました。Datanucleus JDOがnullにフィールドを設定する
public class TestPersistance {
private static final PersistenceManagerFactory PMF = JDOHelper.getPersistenceManagerFactory("datanucleus.properties");
public static final PersistenceManager pm = PMF.getPersistenceManager();
static final TestUserDataDB ud = new TestUserDataDB();
public static void main(String args[])
{
TestPersistance tp = new TestPersistance();
tp.createData();
}
@Test public void createData()
{
assertTrue("Null machined id at start", ud.machineId != null);
pm.currentTransaction().begin();
try
{
pm.makePersistent(ud);
}
finally
{
pm.currentTransaction().commit();
}
assertTrue("Null machined id at end", ud.machineId != null);
}
}
ここで、2番目のアサートは失敗します。すなわち、永続化されることを求めている私のオブジェクトは、makePersistent呼び出しによって変更されています。データはデータベースに保存されています。 アイデア誰でもこれを確認できますか? JDO-API-3.0.jar DataNucleusのコア-2.2.0-release.jar DataNucleusのエンハンサー-2.1.3.jar DataNucleusの-RDBMS-2.2.0-release.jar のMySQLコネクタ - Javaを使用して-5.1.13.jar
(MySqlデータベースを使用)
@PersistenceCapable
public class TestUserDataDB {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
public Long id;
@Persistent
public String userid = "test1";
@Persistent
public String machineId = "test2";
// local userid
@Persistent
public long uid = 1L;
@Persistent
public long systemTime = 123L;
public long chk = 1234L;
public long createTime = System.currentTimeMillis();
public TestUserDataDB()
{
}
@Override
public String toString() {
return "TestUserDataDB [chk=" + chk + ", createTime=" + createTime
+ ", id=" + id + ", machineId=" + machineId + ", systemTime="
+ systemTime + ", uid=" + uid + ", userid=" + userid + "]";
}
}
プロパティファイルには、
javax.jdo.PersistenceManagerFactoryClass=org.datanucleus.jdo.JDOPersistenceManagerFactory
datanucleus.metadata.validate=false
javax.jdo.option.ConnectionDriverName=com.mysql.jdbc.Driver
javax.jdo.option.ConnectionURL=jdbc:mysql://localhost/test
javax.jdo.option.ConnectionUserName=root
javax.jdo.option.ConnectionPassword=yeahRight
datanucleus.autoCreateSchema=true
datanucleus.validateTables=false
datanucleus.validateConstraints=false
私はいくつかの読書をしているようです。私はクラスをデータベースに保存することができたと思っていましたが、それは終わりでした。明らかにそうではありませんでした。 – aronp
ps。ありがとう、心苦しいものをたくさん保存しました。 – aronp