2017-02-06 2 views
0

J'ai une table dont le nom est "Pstn" et il y a une table utilisateur. Les utilisateurs n'ont pas besoin d'utiliser la table Pstn. Mais certains utilisateurs peuvent l'utiliser. Donc, si un pstn a un utilisateur, nous voulons voir qui est. Comment puis-je configurer les annotations d'hibernation?Comment configurer la relation basée sur l'annotation hibernate?

pstnBbkTable.setVisibleColumns(new Object[]{"pstn", "bbk", "user.firstName", "inReserve", "creationDate", "expireDate", "button"}); 

java.lang.IllegalArgumentException: Ids doit exister dans le conteneur ou une colonne générée, id manquant: user.firstName à com.vaadin.ui.Table.setVisibleColumns (Table.java:691)

table utilisateur:

@Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "user_Id") 
    private long userId; 

    @Column(name = "username", nullable = false) 
    private String username; 

    @Column(name = "password", nullable = false) 
    private String password; 

    @Column(name = "first_name", nullable = false) 
    private String firstName; 

    @Column(name = "last_name", nullable = false) 
    private String lastName; 

Pstn tableau:

@Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "pstn_Id") 
    private long pstnId; 

    @Column(name = "pstn") 
    private String pstn; 

    @Column(name = "bbk") 
    private String bbk; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "user_Id") 
    private User user; 

********************** SOLUTION À JOUR ****************

J'ai remplacé le haricot pstn domaine comme ci-dessus. Je pense qu'il s'est produit à cause de FetchType.EAGER-Lazy ..

@ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "user_Id") 
    private User owner; 
+0

Ce n'est pas vraiment clair quelle relation vous voulez entre ces 2 tables ... Si j'obtenu ce droit: un utilisateur peut avoir zéro ou plusieurs Pstn? Si oui, vous voulez un userId FK nullable dans la table Pstn – Zeromus

+1

@Zeromus oui droit, mais quand j'essaye de lister toutes les données pstn, j'ai eu une erreur comme ci-dessus; java.lang.IllegalArgumentException: Les ID doivent exister dans le conteneur ou en tant que colonne générée, l'ID manquant: user.firstName \t at com.vaadin.ui.Table.setVisibleColumns (Table.java:691) –

+0

n'a jamais vraiment utilisé cette méthode mais shouldnt user.firstName est-il réellement userId.firstName? On dirait qu'il ne peut pas trouver cette colonne – Zeromus

Répondre

0

J'ai remplacé le champ de haricot pstn comme ci-dessus. Je pense qu'il est survenue à cause de FetchType.EAGER-Lazy ..

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "user_Id") 
private User owner;