Я экспериментирую с JPA и Glassfish 4.0.Weird java.lang.ClassCastException throw
Я написал класс пользователей, как это (только соответствующие части, и я не уверен, если он компилирует):
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("[email protected]");
userFacade.create(user);
return "";
}
И моя страна боб просто обычный боб с простыми, расположенными в атрибутах объявления:
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));
Может кто-нибудь сказать мне, почему это происходит? Если все работает так, как ожидается, пользователь будет вставлен в базу данных. Но если i для instanse пытается вставить пользователя, который уже существует, я получаю ошибку базы данных.
В следующий раз я получаю странное исключение. Я не могу понять, почему класс нельзя использовать для себя.
Мне нужно перезагрузить свой экземпляр GF, чтобы избавиться от него.
Не очень продуктоподобный.
Спасибо за любой ввод.
CCE является бросок, потому что класс не может быть приведен к другой, если это не тот же класс или классы были загружены различными загрузчиками классов. Наверное, это последнее в твоем случае. –
Возможно, это так. но как это происходит? –
Является ли это частью одного EAR? Вы на 100% не можете столкнуться с загрузчиками классов? Например. два EAR или WAR, каждый из которых имеет свой собственный модельный класс («Страна») и вызывает друг друга или что-то вроде этого? –