2017-02-05 2 views
0

エンティティを読み込むときに@Formulaアノテーションを使用して集計関数を使用します。@FormulaでHibernateで結合する

次の文を使用すると、例外が発生します。

 

    (SELECT sum(inovalue.vba) FROM INO i_no INNER JOIN i_no.listValues inovalue WHERE i_no.id = '91c78419-e528-453f-a60d-9f2050e12c79') 

 

    Caused by: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "WHERE" at line 1, column 401. 
     at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source) 
     at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) 
     at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source) 
     at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:213) 
     at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534) 
     at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452) 
     at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) 
     at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700) 
     at org.hibernate.loader.Loader.doQuery(Loader.java:801) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
     at org.hibernate.loader.Loader.loadCollection(Loader.java:2166) 
     ... 17 more 
    Caused by: org.apache.derby.client.am.SqlException: Syntax error: Encountered "WHERE" at line 1, column 401. 
     at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source) 
     at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source) 
     at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source) 
     at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source) 
     at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source) 
     at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source) 
     at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source) 
     at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source) 
     at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source) 
     at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source) 
     at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source) 
     ... 26 more 

私は@Formular注釈の外のステートメントを使用している場合は、私は正しい結果を取得します。 INOオブジェクトではなく、別のオブジェクトでこの注釈を使用していると言わなければなりません。

これらは縮小された形式のエンティティです。

エンティティのCs

@Entity 
@Table(name = "cs") 
public class Cs { 

    @Id 
    @GeneratedValue(generator="uuid") 
    @GenericGenerator(name="uuid", strategy="org.hibernate.id.UUIDGenerator") 
    @Column(length=40) 
    private String id = ""; 

    @Column(name = "inoId_ref_id", length = 40) 
    private String inoId = null; 

    @Formula("(SELECT sum(inovalue.vba) FROM Ino i_no INNER JOIN i_no.listValues inovalue WHERE i_no.id = inoId)") 
    private Double lbst = null; 

    public Cs() { 
    } 
} 

エンティティ井野

@Entity 
@FilterDef(name="inoDateFilter", [email protected](name="inoDateFilterParam", type="integer")) 
@Table(name="ino") 
public class Ino { 

    @Id 
    @GeneratedValue(generator="uuid") 
    @GenericGenerator(name="uuid", strategy="org.hibernate.id.UUIDGenerator") 
    @Column(length=40) 
    private String id = ""; 

    @OneToMany (orphanRemoval=true, cascade=CascadeType.ALL) 
    @LazyCollection(value=LazyCollectionOption.FALSE) 
    @JoinColumn(name = "ioifeflref_id") 
    @Filter(name = "inoDateFilter", condition="year(datumVon) = :inoDateFilterParam") 
    @OrderBy("datumVon ASC") 
    private List<InoValue> listIntervallFeFl = new ArrayList<InoValue>(); 

    public INO() { 
    } 
} 

エンティティInoValue

@Entity 
@Table(name="inovalue") 
public class InoValue { 

    @Id 
    @GeneratedValue(generator="uuid") 
    @GenericGenerator(name="uuid", strategy="org.hibernate.id.UUIDGenerator") 
    @Column(length=40) 
    private String id = ""; 

    @Column(name = "vba") 
    private Double vba = null; 

    */ 
    public InoValue() { 
    } 
} 

What's間違っていますか?テストのために、derbyデータベースを使用します。

誰かが考えていますか?

よろしく MS-Techは

答えて

1

あなた@Formula注釈の内容が有効なSQLないHQL/JPQLであることを確認します。

関連する問題