2017-10-17 3 views
0

J'ai une classe et je n'ai besoin que d'une seule colonne d'une autre entité mappée. Je préférerais annuler une référence complète. Y a-t-il un moyen de faire cela? J'ai googlé exhaustivement mais je ne dois pas avoir la bonne terminologie.Hibernate - Rejoindre une seule colonne au lieu de l'entité entière

Expliqué:

@Entity 
@Table(name = "foo") 
@Data 
public class Foo { 
    @Id 
    @Column(name = "itemid") 
    private long id; 

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

Cela fonctionne:

@Entity 
@Table(name = "bar") 
@Data 
public class Bar{ 
    @Id 
    @Column(name = "itemid") 
    private long id; 

    @Column(name = "other_name") 
    private String otherName; 

    @OneToOne 
    @PrimaryKeyJoinColumn 
    private Foo foo; 
} 

Mais je veux:

@Entity 
@Table(name = "bar") 
@Data 
public class Bar{ 
    @Id 
    @Column(name = "itemid") 
    private long id; 

    @Column(name = "other_name") 
    private String otherName; 

    @OneToOne 
    @JoinColumn(name = "itemid") 
    @Formula("SELECT name FROM FOO v where v.id = id") 
    // Something here...not sure what. Where name is the name from Foo 
    private String name; 
} 
+0

Avez-vous essayé ce dernier extrait, sans les '@ OneToOne' et' @ JoinColumn'? Juste le '@ Formula'? – corsiKa

Répondre

1

Vous avez un couple d'options. La première est de, comme vous le faites allusion, utiliser @Formula - sans les autres annotations que vous avez là-bas, en utilisant simplement @Formula. Cela devrait faire exactement ce que vous attendez. Sinon, si vous en avez souvent besoin, vous pouvez créer une vue qui joint les deux colonnes et dont l'objet est basé sur cette vue au lieu des tables d'origine.

+0

Donc, j'ai laissé tomber OneToOne et JoinColumn en ne laissant que la formule et j'ai "impossible d'extraire ResultSet; SQL [n/a]". J'ai besoin de la partie "où" mais je ne sais pas si c'est correct. – Rig

0

Je crois que vous ne devriez pas faire cela. Votre classe d'entité doit décrire uniquement la manière dont les données sont stockées. Vous ajoutez une logique là où elle n'est pas censée être.

Considérez également ce qui se passe lorsque vous ne stockez pas de clé étrangère dans l'autre table. Si l'entité est modifiée, vous n'obtenez pas la mise à jour.