JPA と Glassfish 4.0 を試しています。
私はこのようなユーザークラスを書きました(関連する部分だけで、コンパイルできるかどうかはわかりません):
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "first_name")
private String firstName;
@JoinColumn(name = "country_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private Country country;
public void setCountry(Country countryId) {
this.country = countryId;
}
}
私の TestController (関連する部分のみ):
@ManagedBean(name = "testController", eager = true)
@RequestScoped
public class TestController implements Serializable {
@EJB
private dk.iqtools.session.UserFacade userFacade;
public String Insert(){
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();
Query cq = em.createQuery("select c from Country c where c.id = 302");
List<Country> countryList = cq.getResultList();
User user = new User();
user.setFirstName("Hans123");
user.setLastName("Knudsen333");
user.setCountry((Country)countryList.get(0)); <- throws an ERROR
user.setPassword("secret");
user.setYearOfBirth(1966);
user.setGender(1);
user.setEmail("haps@hfhfh.dk2243");
userFacade.create(user);
return "";
}
そして、私の Country Bean は、次の場所にある単純な属性を持つプレーンな Bean です。
dk.iqtools.entity
一般的には機能しますが、コードでエラーが発生した場合、次のエラーが永続的に表示されます。
Caused by: java.lang.ClassCastException:
dk.iqtools.entity.Country cannot be cast to dk.iqtools.entity.Country
at dk.iqtools.controller.TestController.Insert(TestController.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
問題のあるステートメントは次のとおりです。
user.setCountry((Country)countryList.get(0));
なぜそれが起こるのか誰か教えてもらえますか?すべてが期待どおりに実行された場合、ユーザーはデータベースに挿入されます。しかし、たとえば、既に存在するユーザーを挿入しようとすると、データベース エラーが発生します。
次回は奇妙な例外を受け取ります。クラスをそれ自体にキャストできない理由がわかりません。
それを取り除くには、GF インスタンスを再起動する必要があります。
あまり生産的ではありません。
ご意見ありがとうございます。