Я недавно опубликовал сообщение о заполнении JTable, который теперь полностью функционален.
Как бы то ни было, сейчас я застрял над чем-то другим, и я надеюсь достичь двух конкретных оттенков в этой теме.
Один - решить мою проблему, а другой - иметь готовый ответ, когда другие сталкиваются с той же проблемой, потому что я так и не нашел правильного ответа.
У меня есть следующий сценарий
Два стола:
игр
id pk int
жанр int
название варчар ....
жанр
id pk int
имя варчар ..
Одна игра может иметь только один жанр, но один жанр может содержать много игр.
Я использую Eclipse в качестве своей IDE и eclipselink в качестве поставщика JPA.
Я создал классы с помощью мастера создания сущностей, предоставленного eclipse, который также позволил мне определить отношения между двумя таблицами.
Отношения выглядят следующим образом:
@Entity
@Table(name="games")
public class Game implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="Id", unique=true, nullable=false)
private int id;
@Temporal( TemporalType.DATE)
@Column(name="AddDate", nullable=false)
private Date addDate;
@Lob()
@Column(name="Description", nullable=false)
private String description;
@Temporal( TemporalType.DATE)
@Column(name="ModifiedDate", nullable=false)
private Date modifiedDate;
@Temporal( TemporalType.DATE)
@Column(name="ReleaseDate", nullable=false)
private Date releaseDate;
@Column(name="Title", nullable=false, length=255)
private String title;
//bi-directional many-to-one association to Genre
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Genre", nullable=false)
private Genre genreBean;
//bi-directional many-to-one association to Publisher
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Publisher", nullable=false)
private Publisher publisherBean;
и жанр
@Entity
@Table(name="genres")
public class Genre implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="Id", unique=true, nullable=false)
private int id;
@Column(name="Genre", nullable=false, length=150)
private String genre;
//bi-directional many-to-one association to Game
@OneToMany(mappedBy="genreBean")
private List<Game> games;
Я использую следующее, чтобы выбрать все игры
List<Game> games;
try{
TypedQuery<Game> selectGamesQuery = entityManager.createQuery("SELECT g FROM Game g", Game.class);
games = selectGamesQuery.getResultList();
} catch(Exception e) {
games = null;
System.out.println(e);
Проблема здесь в том, что список игр не содержит названия жанра, на самом деле он пуст.
Как настроить список, содержащий игру со следующими атрибутами: id, title, genre-name, publisher-name, Releaseate
В моем JTable я пробовал следующее:
switch(columnIndex){
case 0:
return game.getTitle();
case 1:
return game.getPublisherBean().getPublisher();
case 2:
return game.getGenreBean().getGenre();
case 3:
return game.getReleaseDate();
}
В этом случае в моем JTable столбцы для случаев 1 и 2 пусты, а остальные работают.
Итак, содержимое моей таблицы выглядит как
Battlefield 3 empty empty 3-3-2011
Думаю, мне следовало предоставить достаточно информации.
Пожалуйста, дайте мне знать, есть ли какая-либо ошибка или ошибка в коде, или, возможно, запрос на выборку, поскольку я даже не смог найти, должен ли я написать явный запрос JOIN и что он этого не делает из-за определенного отношения.
Я все еще новичок, поэтому, пожалуйста, будьте нежны ^^
Спасибо за ваше время.