2017-07-01 57 views
0

私は@query、アノテーションを使用していますが、私はレコードの数を取得しようとすると、それは私がリポジトリに私のカスタムクエリを書いているSQLEXCEPTION:列が見つからないJPAの@query

java.sql.SQLException: Column 'allowPartialPay' not found. 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094) ~[mysql-connector-java-5.1.31.jar:na] 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997) ~[mysql-connector-java-5.1.31.jar:na] 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983) ~[mysql-connector-java-5.1.31.jar:na] 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928) ~[mysql-connector-java-5.1.31.jar:na] 
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1162) ~[mysql-connector-java-5.1.31.jar:na] 
    at com.mysql.jdbc.ResultSetImpl.getBoolean(ResultSetImpl.java:1781) ~[mysql-connector-java-5.1.31.jar:na] 

をスローします。

InvoiceRepository.java

public interface InvoiceRepository extends JpaRepository<Invoice, Integer>{ 

    Invoice findByInvoiceNumber(String invoiceNumber); 

    List<Invoice> findByUserId(int id); 

    @Query(value = "select c.id,c.business_name,count(i.id) from client c join invoice i on c.id = i.client_id where i.date <= :agingDate group by c.id",nativeQuery=true) 
    List<Invoice> findInvoiceCount(@Param("agingDate")Date agingDate); 

} 

ReportService.java

if(report.getReportBy().equals("invoiceCount")){ 
        result = invoiceRepository.findInvoiceCount(report.getAgingDate()); 
       } 

Invoice.java

@Entity 
@Table 
public class Invoice { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="id") 
    private int id; 

    @ManyToOne 
    private Client client; 

    @Column 
    private boolean allowPartialPay; 
} 

データベース

enter image description here

+0

@NeilStockton私は私のリポジトリコード – poojadave

+0

を更新しました。これは請求書テーブルから来ており、呼び出されるクエリは 'c.id、c.business_name、count(i.id) i.client_id i.date <=? group by c.id ' – poojadave

+0

@NeilStocktonまた、メソッドが呼び出されるメソッドを追加しました – poojadave

答えて

1

JavaのInvoiceクラスへのマッピング結果セット中に(メソッドfindInvoiceCount()の戻り値の型として宣言したように)来ます。あなたのケースではネイティブクエリの戻り値はListではなくObject []です。クエリが実行された後

あなたは、ログ例外でだから、結果マッピング段階で起こる

ResultSetImpl.findColumn(ResultSetImpl.java:1162をそれを見ることができます。

@Query(value = "select c.id,c.business_name,count(i.id) from client 
      c join invoice i on c.id = i.client_id 
      where i.date <= :agingDate group by c.id",nativeQuery=true) 
    List<Invoice> findInvoiceCount(@Param("agingDate")Date agingDate); 

バネデータはクエリ結果から結果セットを取得し、フィールド別にインボイスフィールドにマップしようとします(インボイスクラスを作成しようとします)。実際のタイプはObjectです[]。

結果としていくつかのDTOを取得する必要がある場合、結果セットは 'c.id、c.business_name、count(i.id)'のようになります。@SqlResultSetMappingを使用します(選択クエリあなたのdtoに)。または、戻り値の型をListからObjectに変更し、必要に応じて繰り返します。

Result Set Mapping: The Basicsの例を示します。

関連する問題