2010-06-08 12 views
0

J'ai deux tables:La sélection d'un objet à partir d'un à plusieurs dans Hibernate

Job 
job_id, <other data> 

Job_Link 
job_link_id, job_id, start_timestamp, end_timestamp, <other data> 

Il peut y avoir plusieurs enregistrements en Job_Link spécifiant le même job_id avec le start_timestamp et end_timestamps pour indiquer quand ces documents sont Considéré comme "courant", il est garanti que start_timestamp et end_timestamp ne se chevaucheront pas.

Nous avons des entités pour les tables Job et Job_Link et la définition d'une relation un-à-plusieurs pour charger tous les liens de travail ne poserait aucun problème. Cependant, nous aimerions éviter cela et avoir un seul élément job_link dans l'entité Job qui ne contiendra que l'objet Job_Link "actuel".

Y a-t-il un moyen de réaliser cela?

Répondre

0

C'est possible avec l'annotation @WhereJoinTable. Dans l'entité Tâche, ajoutez un lien @OneToOne exactement comme vous définissez le @OneToMany sur l'objet JobLink.

@OneToOne(...) 
@WhereJoinTable(clause = "now() between start_timestamp and end_timestamp") // mysql 
@WhereJoinTable(clause = "sysdate between start_timestamp and end_timestamp") // oracle ... 
private JobLink jobLink 

Inconvénients: il brise la base de données et la portabilité fournisseur JPA