Что я пытаюсь сделать, так это присоединиться к таблице в другую таблицу на основе идентификатора пользователя.Play Framework Join Table
У меня есть таблица пользователей и таблица истории предупреждений, которая имеет внешний ключ, связанный с идентификатором пользователя.
Я использую сущности, созданные Netbeans 7.4.
Пользователь:
@Entity
@Table(name = "Users", schema = "dbo")
public class User extends Model implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "UserID")
private Integer userID;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "userId")
private Collection<AlertHistory> alertHistoryCollection;
{ ... }
Предупреждение История:
@Entity
@Table(name = "Alert_History", schema = "dbo")
public class AlertHistory extends Model implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
@Basic(optional = false)
@Column(name = "user_id")
@ManyToOne(fetch = FetchType.EAGER)
private int userId;
@Basic(optional = false)
@Column(name = "message_id")
private long messageId;
@Basic(optional = false)
@Lob
@Column(name = "alerts_triggered")
private String alertsTriggered;
{...}
То, что я бы ожидать, что, когда я загружаю пользователя, он будет пытаться присоединиться результаты AlertsHistory
таблицы на основе USERID. Тем не менее, во время выполнения, то AlertsHistory
Collection всегда null
Update: решаемые
Я смотрел на это неправильный путь. Чтобы сделать JOIN, AlertHistory ожидала передачи объекта User, а не только ключа userId. Добавив поле User
в модель AlertHistory
и сменив @OneToMany(mappedBy = "userId")
на @OneToMany(mappedBy = "user"
, добавив @JoinColumn(name="user_id", referencedColumnName="userId") private User user;
к этому полю User
в AlertHistory
, меня разобрали! Спасибо всем за помощь.
В случае, если не atributte «частная int userId "at AlertHistory be" private User userId "? – edubriguenti
Спасибо @edubriguenti, это был гвоздь в гробу! Я смотрел на все это неправильно. Я думал, что мне нужно передать ключ (userId), когда мне действительно нужно просто ссылаться на весь объект. Это привело меня к еще одной проблеме из-за того, что JPA вывел как столбец для сопоставления (т. Е. Искал столбец user_userId, который, конечно, не существует). Решение было добавить следующее 'AlertHistory': ' @JoinColumn (имя = "user_id", referencedColumnName = "идентификатор пользователя") частный пользователь User; ' –