EclipseLink を実行する Web サービスがあります。データベース スキーマに基づく Java クラスを NetBeans で生成しました (「データベースからのエンティティ クラス...」)。
私の問題は、データベース スキーマに基づいて NetBeans によって生成された Person.java と Group.java という 2 つのクラスについてです。Person.java および Group.java は、JAR ファイル「MyLib.jar」の一部です。
Group.java には、次のコードがあります (他のコードの中でも):
@Column(name = "groupName")
private String groupName;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "group")
private Collection<Person> personCollection;
public String setGroupName(String groupName) {
this.groupName = groupName;
}
public String getGroupName(){
return groupName;
}
@XmlTransient
public Collection<Person> getPersonCollection() {
return personCollection;
}
public void setPersonCollection(Collection<Person> personCollection) {
this.personCollection = personCollection;
}
「MyLib.jar」を含む 2 つの異なるアプリケーションがあります。1 つは Web サービス自体で、もう 1 つは Web サービスに接続するクライアントです。もちろん、クライアントには Web サービス インターフェイス JAR も含まれています。
クライアントで、次のように Person のコレクションを作成し、グループ インスタンスを Web サービスに送信します。
Collection<Person> persons = new ArrayList<Person>();
Person person = new Person();
person.setName("Peter");
persons.add(person);
group.setName("GroupName");
group.setPersonCollection(persons);
System.out.print(persons); // prints the instance and its content
webserviceInstance.setGroup(group);
本当に奇妙なことは、Web サービス メソッドsetGroup
では、コレクションが null であることです。
@Override
public void setGroup(Group group) {
System.out.print(group.getGroupName()); // prints "GroupName"
System.out.print(group.getPersonCollection()); // prints null meaning the instance is null
...
}
Web サービスではコレクションが null であるのに、クライアントではコレクションが null ではない理由を理解できません。私は何か間違ったことをしていますか?