Немного предыстории
У меня есть игровая база данных с таблицей под названием Игры, которая имеет несколько атрибутов, и одна с именем Жанры.Атрибут Genres определяется как целое число [] в PostgreSQL.Для простоты я не использую никаких ограничений внешнего ключа, но по существу каждое целое число в этом массиве является ограничением внешнего ключа для атрибута id в таблице Genres.Первый раз работал с образцом формы NetBeans Master / Detail и с сохранением Java, и до сих пор он работал отлично, за исключением одной вещи.Я получаю эту ошибку, когда программа пытается отобразить столбец с 1-мерным целочисленным массивом.В этом примере значение равно {1, 11}.
Exception Description: The object [{1,11}], of class [class org.postgresql.jdbc3.Jdbc3Array], from mapping [oracle.toplink.essentials.mappings.DirectToFieldMapping[genres-->final.public.games.genres]] with descriptor [RelationalDescriptor(finalproject.Games --> [DatabaseTable(final.public.games)])], could not be converted to [class [B].
Exception [TOPLINK-3002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ConversionException
Мои исследования
Из того, что я смог прочитать, похоже, что PostgreSQLмассивам нужно сделать что-то особенное, прежде чем вы сможете отображать и редактировать их в этом шаблоне.По умолчанию образец формы использует TopLink Essentials (JPA 1.0) в качестве библиотеки постоянства, но я также могу использовать Hibernate (JPA 1.0).
Вот код, который необходимо каким-то образом изменить.Из файла Games.java:
@Entity
@Table(name = "games", catalog = "final", schema = "public")
@NamedQueries({
// omitting named queries
@NamedQuery(name = "Games.findByGenres", query = "SELECT g FROM Games g WHERE g.genres = :genres")
})
public class Games implements Serializable {
@Transient
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
// omitting other attributes
@Column(name = "genres")
private Serializable genres;
// omitting constructors and other getters/setters
public Serializable getGenres() {
return genres;
}
public void setGenres(Serializable genres) {
Serializable oldGenres = this.genres;
this.genres = genres;
changeSupport.firePropertyChange("genres", oldGenres, genres);
}
} // end class Games
Вот также некоторые сайты, которые могут иметь решение, которое я просто не понимаю: https://forum.hibernate.org/viewtopic.php?t=946973
http://blog.xebia.com/2009/11/09/understanding-and-writing-hibernate-user-types/
// пропущена гиперссылка из-за ограничений пользователя
Попытки решения
Я могу получить данные для отображения, если изменить тип жанра наСтрока, но она неизменна, и я не могу ее редактировать.Вот что я изменил, чтобы сделать это:
@Column(name = "genres")
private String genres;
public String getGenres() {
return genres;
}
public void setGenres(String genres) {
String oldGenres = this.genres;
this.genres = genres;
changeSupport.firePropertyChange("genres", oldGenres, genres);
}
Я также попытался создать файл UserType для использования с Hibernate (JPA 1.0), но не знал, что там происходит.
Я также пытался использовать @OneToMany и другие теги, но они не работают, вероятно, потому что я их не правильно использую.
Что я ищу
Должен быть простой способ отобразить эти данные и сделать их редактируемыми, но, поскольку я абсолютно новичок в постоянстве, я понятия не имею, что делать.