2 pièce(s) jointe(s)
[Hibernate] Requête avec un Embedded Id
Bonjour.
J'ai un problème avec Hibernate.
J'ai une table sans colonne servant d'ID. J'ai donc utilisé un embedded id car il faut absoluement un ID avec hibernate.
J'ai choisi un couple de colonnes qui permet d'identifier de manière unique une ligne de la table.
Cependant quand je requête sur un seul de cet ID, la requête ne me renvoie pas toutes les valeurs...
Table :
Mon entité :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @Entity
@Component
@Data
@Table(name = "F_AVANCEMENT_ACTION")
public class AvancementActionDtw {
// --------------------------------------------------------
// FIELDS
// --------------------------------------------------------
@Id
private AvancementActionDtwPk id;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DATE_AVANCEMENT", nullable = false)
private Date dateAvancement;
@Column(name = "COUT", nullable = true)
private Integer coutAction;
} |
Mon embbeded Id :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @Data
@Embeddable
@EqualsAndHashCode(of = { "codeAction", "codeAvancement" })
public class AvancementActionDtwPk implements Serializable {
private static final long serialVersionUID = 1L;
// --------------------------------------------------------
// Fields
// --------------------------------------------------------
@Column(name = "CODE_ACTION", nullable = false)
private String codeAction;
@Column(name = "CODE_AVANCEMENT", nullable = false)
private String codeAvancement;
} |
Mon DAO :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
@Repository
@Component
public interface AvancementActionDtwDao extends JpaRepository<AvancementActionDtw, AvancementActionDtwPk> {
/**
* Recherche les {@link AvancementActionDtw} via leur code action et leur code avancement
*
* @param codeAction le code de l'action à trouver
* @param codeAvancement le code avancement à utiliser pour filtrer
*
* @return les {@link AvancementActionDtw}
*/
@Query("from AvancementActionDtw where id.codeAction = :codeAction and id.codeAvancement = :codeAvancement")
List<AvancementActionDtw> findAvancementActionDtw(@Param("codeAction") String codeAction,
@Param("codeAvancement") String codeAvancement);
/**
* Recherche les {@link AvancementActionDtw} via leur code action
*
* @param codeAction le code de l'action à trouver
*
* @return les {@link AvancementActionDtw}
*/
@Query("from AvancementActionDtw where id.codeAction = :codeAction")
List<AvancementActionDtw> findAvancementActionDtw(@Param("codeAction") String codeAction);
} |
Si je fais
Code:
findAvancementActionDtw("A0000002")
je ne récupère que la 2ème entrée <"A0000002"; "Engagée">
Si je demande explicitement la première entrée
Code:
findAvancementActionDtw("A0000002", "Terminée")
je ne récupère rien...
Quelqu'un peut-il m'indiquer où est mon erreur ?
Cordialement.