Я буду использовать аннотацию @Formula для использования агрегатной функции при загрузке объекта.Присоединиться к @Formula with 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.
Это юридические лица в сокращенной форме.
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 Ино
@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() {
}
}
Entity 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() {
}
}
как там не так? Для тестирования я использую базу данных дерби.
Есть ли у кого-нибудь идеи?
Привет MS-Tech