2015-01-25 2 views
0

У меня есть два класса сущностей Пользователь и WalletData Я хочу сделать связь Один пользователь ко многим кошелькам с аннотациями, но я не знаю как. Также отношение, которое я хочу передать по полю подписи, расположенному в пользовательском объекте.OnetoOne и OneToMany в спящем режиме

@Entity(name = "wallet_data") 
public class WalletData implements Serializable 
{ 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    @Column(name = "amount") 
    private Double amount; 
    @Column(name = "currency") 
    private String currency; 
    @JoinColumn(table = "user",referencedColumnName = "signature") 
    private User user; //Each wallet know who is his owner user 

и

@Entity 
@Table(name = "user") 
@XmlRootElement 
@NamedQueries(
     { 
      @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u"), 
      @NamedQuery(name = "User.findById", query = "SELECT u FROM User u WHERE u.id = :id"), 
      @NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE u.username = :username"), 
      @NamedQuery(name = "User.findByPassword", query = "SELECT u FROM User u WHERE u.password = :password"), 
      @NamedQuery(name = "User.authorize", query = "SELECT u FROM User u WHERE u.password = :password and u.username = :username") 
     }) 
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) 
    @Column(name = "username") 
    private String username; 
    @Basic(optional = false) 
    @Column(name = "password") 
    private String password; 
    @Column(name = "signature") 
    private String signature; 
    @JoinColumn(name = "user_id", referencedColumnName = "id") 
    @OneToOne(targetEntity = UserData.class) 
    private UserData userId; 
    @OneToMany(targetEntity = WalletData.class, cascade = CascadeType.ALL,mappedBy = "id") 
    private Set<WalletData> wallets; //The set contain all wallets of the current user 
+1

Вы забыли '@ ManyToOne'annotation на' WalletData.user'. А атрибут mappedBy должен быть 'user', так как это поле, которое составляет другую сторону ассоциации. Двунаправленные ассоциации OneToMany описаны в документации. Прочтите: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#d5e5564 –

+0

Спасибо, что помогли. Пожалуйста, отправьте ответ, чтобы я мог пометить его как правильно. –

ответ

1

Вы забыли @ManyToOne аннотацию на WalletData.user.

Атрибут mappedBy должен быть user, так как это поле, которое составляет другую сторону ассоциации.

Двунаправленные ассоциации OneToMany описаны в документации. Прочтите: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#d5e5564