ActiveObjectsの同じテーブルに2つのOneToMany関係を書き込むにはどうすればよいですか? なぜこのテストケースが失敗するのですか?ActiveObjectsの同じテーブルに2つのOneToMany関係を書き込む方法
単純なメッセージエンティティ。
import net.java.ao.Entity;
public interface Message extends Entity{
public void setSender(Communicator sender);
public void setAcceptor(Communicator acceptor);
}
単純なコミュニケータ(個人またはサーバー)。
import net.java.ao.Entity;
import net.java.ao.OneToMany;
public interface Communicator extends Entity {
@OneToMany
public Message[] getSendMessages();
@OneToMany
public Message[] getAcceptMessages();
}
テストケース。
1. localhostのmysqlに接続します。
2.テーブルスキーマを作成します。
3.送信者と受信者の2つのコミュニケータを作成します。
4. setSender(送信者)とsetAcceptor(受信者)として10個のメッセージを作成します。
5.送信者が受け入れたメッセージの数をチェックします。ゼロにする必要があります。
6.しかし、junitは10であると言いますが、ゼロではありません。
import java.sql.SQLException;
import junit.framework.TestCase;
import net.java.ao.EntityManager;
public class AOTest2 extends TestCase{
public void test() {
String db_host = "localhost";
String db_database = "test";
String db_login = "root";
String db_password = "";
EntityManager m = new EntityManager("jdbc:mysql://" + db_host + "/" + db_database, db_login, db_password);
try {
m.migrate(Communicator.class, Message.class);
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
Communicator sender = m.create(Communicator.class);
Communicator acceptor = m.create(Communicator.class);
sender.save();
acceptor.save();
for (int i = 0; i < 10; i++) {
Message mes = m.create(Message.class);
mes.setAcceptor(acceptor);
mes.setSender(sender);
mes.save();
}
assertEquals(true, sender.getAcceptMessages().length == 0);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ありがとうございます。
[この質問の重複](http://stackoverflow.com/questions/669828/how-to-have-2-collections-of-the-same-type-in-jpa) – nobeh
ao does not have @JoinTable注釈。 http://activeobjects.java.net/0.8.2/api/net/java/ao/package-summary.html – KenichiYamamoto
@nobeh JPAとActiveObjectsは類似していますが、2つの異なるORMです。 –