2015-07-07 7 views
2

У меня возникла проблема с выполнением пользовательского запроса с использованием репозитория данных java-данных весны.запрос данных репозитория данных весны содержит коллекцию

У меня есть класс репозитория, реализующий JPARepository <>. Все работает так, как ожидалось, для всех встроенных запросов CRUD наряду с некоторыми пользовательскими запросами, но выполнение квалификации среди внутренних коллекций не работает и возвращает полный набор результатов, как если бы квалификация коллекции не существовала.

Например, вот запрос:

public interface MessageRepository extends JpaRepository<Message, Integer> { 
@Query("SELECT a FROM Message a, Message_Topic b WHERE a.systemNm = :theSystem AND a. applicationNm = :theApplication AND b.topicNm = :theTopicName AND a.insertTs BETWEEN :theStartDate AND :theEndDate AND a.expirationDt > CURRENT_TIMESTAMP") 
List<Message> findMessagesByTopic(@Param("theSystem") String theSystem, 
     @Param("theApplication") String theApplication, 
     @Param("theTopicName") String theTopicName, 
     @Param("theStartDate") Date theStartDate, 
     @Param("theEndDate") Date theEndDate); 

следующими объектами JPA:

Сообщение:

@Entity 
public class Message implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id 
@Column(name="message_id") 
private int messageId; 

@Column(name="application_nm") 
private String applicationNm; 

@Column(name="execution_instance_txt") 
private String executionInstanceTxt; 

@Temporal(TemporalType.TIMESTAMP) 
@Column(name="expiration_dt") 
private Date expirationDt; 

@Column(name="grouping_des") 
private String groupingDes; 

@Temporal(TemporalType.TIMESTAMP) 
@Column(name="insert_ts") 
private Date insertTs; 

@Column(name="message_detail_txt") 
private String messageDetailTxt; 

@Column(name="message_summary_txt") 
private String messageSummaryTxt; 

@Column(name="severity_des") 
private String severityDes; 

@Column(name="system_nm") 
private String systemNm; 

//uni-directional many-to-one association to Message_Topic 
@OneToMany(fetch=FetchType.EAGER) 
@JoinColumn(name="message_id", referencedColumnName="message_id") 
private Set<Message_Topic> messageTopics; 

Message_Topic:

@Entity 
public class Message_Topic implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id 
@Column(name="message_topic_id") 
private int messageTopicId; 

@Column(name="message_id", insertable=false, updatable=false) 
private int messageId; 

@Column(name="topic_nm") 
private String topicNm; 

@Column(name="topic_value_txt") 
private String topicValueTxt; 

ответ

2

Это ваш запрос:

SELECT a FROM Message a, Message_Topic b WHERE a.systemNm = :theSystem AND a. applicationNm = :theApplication AND b.topicNm = :theTopicName AND a.insertTs BETWEEN :theStartDate AND :theEndDate AND a.expirationDt > CURRENT_TIMESTAMP 

В каких случаях Message и Message_Topic объединяются ?, Если вы преобразуете этот запрос в собственный запрос, возможно, вы сможете обнаружить ошибку.

+2

Благодарим вас за исправление моей глупости ... Несколько дней лучше других. – LetsBeFrank

Смежные вопросы