gpt4 book ai didi

java - 使用 Hibernate 加入 @Formula

转载 作者:行者123 更新时间:2023-12-01 08:55:41 27 4
gpt4 key购买 nike

当我加载实体时,我将使用@Formula注释来使用聚合函数。

如果我使用以下语句,我将得到一个异常。

    (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

If i use the statement outside of the @Formular annotation, i will get the correct result. Where I have to say that I use this annotation in another object, not in the INO object.

These are the entitys in reduced form.

Entity 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", parameters=@ParamDef( 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() {
}
}

怎么了?为了进行测试,我使用 derby 数据库。

有人有什么想法吗?

问候微软科技

最佳答案

确保您的@Formula注释的内容是有效的SQL而不是HQL/JPQL。

关于java - 使用 Hibernate 加入 @Formula,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42053354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com