Я столкнулся с действительно раздражающей ситуацией: Я использую Hibernate и Spring в качестве backend для моего приложения и кажется, что в некоторых случаях сущности, которые находятся в отношениях с конкретной сущностью, не извлекаются как обычные объекты сущности из БД, а как Javassist типы. Например:
У меня есть сущность Campaign со следующими отношениями:
@Entity
@Table(name = "campaign")
public class Campaign implements Serializable {
[..]
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {
"campaign_id", "dealer_id" }), name = "campaign_has_dealer", joinColumns = { @JoinColumn(name = "campaign_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "dealer_id", nullable = false) })
private List<Dealer> dealers = new ArrayList<Dealer>();
@ManyToMany
// (fetch = FetchType.LAZY)
@JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {
"campaign_id", "sales_area_id" }), name = "campaign_has_sales_area", joinColumns = { @JoinColumn(name = "campaign_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "sales_area_id", nullable = false) })
private List<SalesArea> salesAreas = new ArrayList<SalesArea>();
}
При получении salesAreas, связанных с этой Campaign, я получаю список SalesArea_$$_javassist_56, в то время как для дилеров я получаю обычные сущности Hibernate. Поскольку клиентская часть основана на GWT, мы используем RequestFactory для получения данных. Я сначала подумал, что это проблема с прокси, локаторами и так далее, но я установил точку останова в сервисе, где они извлекаются, и они являются объектами Javassist непосредственно после их выбора. Похоже, что даже удаление аннотации FetchType.LAZY (хотя это определенно нежелательное решение), происходит то же самое. Это происходит и с другими типами отношений, не только @ManyToMany.
Мы используем GWT 2.3, Spring 3, Hibernate 3.6.3 и JPA 2.0 для аннотаций.
Любые предложения будут оценены по достоинству.
Заранее спасибо