2017-08-17 4 views
3

Est-il possible d'implémenter JPA-repository avec un filtrage par lob-column?JPA Repository Lob colonne

J'ai le code suivant:

@Entity 
@Table(name = "SUBJECT_IDENTIFIER")  
public class SubjectIdentifier implements Serializable { 

    @Id 
    @Column(name = "SUBJECT_IDENTIFIER_ID") 
    private long subjectIdentifierIid; 

    @Lob 
    @Column(name = "SOR_BP_GUID", columnDefinition="BLOB NOT NULL") 
    private byte[] bpGuid; 

    //getter/setter 
} 


public interface SubjectIdentifierRepository extends JpaRepository<SubjectIdentifier, Long> { 

    @Query("select si from SubjectIdentifier si where si.bpGuid= :bpGuid") 
    SubjectRepository findByBpGuid(@Param("bpGuid") byte[] bpGuid); 

} 

// test

SubjectRepository byBpGuid = subjectIdentifierRepository.findByBpGuid("D9E70D24567E4DAE8FD3ED5898579092".getBytes()); 

, mais je ne peux pas trouver des objets de base de données. Dois-je implémenter cette requête d'une autre manière?

+0

Votre nom de colonne (dans la DB, et tel que défini dans l'annotation) est 'SOR_BP_GUID' mais votre instruction SQL recherche' si.bpGuid' - Je pense qu'il devrait être 'si.sor_bp_guid' – ochi

Répondre

1

Bien sûr, à condition que votre base de données le supporte.

Je recommande d'écrire votre requête comme indiqué ci-dessous, car l'exigence peut être entièrement résolue sans utiliser l'annotation @Query.

SubjectRepository findOneByBpGuid(@Param("bpGuid") byte[] bs); 

Je suis un peu curieux sur la spécification columnDefinition: est la colonne db réglé sur le mauvais type sans cela? Je préférerais cette déclaration sur l'utilisation de columnDefinition si possible. Cela laissera la base de données de configuration agnostique.

@Column(name = "SOR_BP_GUID", nullable = false) 

Voir aussi: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation