Michael,

Unfortunately the utility did not work for me.

After entering the max method, it ended up failing by throwing an exception
like following. after spending 5 to 10 seconds.
The rest of the program works as before, if I comment out the use of
AggregateUtils.

Any idea?

nobu




//////////////////////////////////////////////////////////////////////////////////////////////////
// console output snippet

INFO: Opening connection: jdbc:postgresql://127.0.0.1:5432/CayenneTest
Login: postgres
Password: *******
Jul 15, 2016 5:16:15 PM org.apache.cayenne.log.CommonsJdbcEventLogger
logConnectSuccess
INFO: +++ Connecting: SUCCESS.

  // Spend some time here and then the exception got thrown

Exception in thread "main" java.lang.RuntimeException: Cannot run MAX query
at
cbe.fetching.utilities.AggregateUtils.getResultUsingTranslator(AggregateUtils.java:230)
at
cbe.fetching.utilities.AggregateUtils.getResultForFunction(AggregateUtils.java:188)
at cbe.fetching.utilities.AggregateUtils.max(AggregateUtils.java:85)
at com.telensa.CayenneTest.main(CayenneTest.java:85)
Caused by: org.apache.cayenne.CayenneRuntimeException: [v.3.1.1 Apr 29 2016
12:50:34] Error detecting database type: Can't obtain connection. Request
timed out. Total used connections: 1
at
org.apache.cayenne.configuration.server.DefaultDbAdapterFactory.detectAdapter(DefaultDbAdapterFactory.java:113)
at
org.apache.cayenne.configuration.server.DefaultDbAdapterFactory$1.get(DefaultDbAdapterFactory.java:84)
at
org.apache.cayenne.configuration.server.DefaultDbAdapterFactory$1.get(DefaultDbAdapterFactory.java:81)
at org.apache.cayenne.dba.AutoAdapter.loadAdapter(AutoAdapter.java:93)
at org.apache.cayenne.dba.AutoAdapter.getAdapter(AutoAdapter.java:81)
at
org.apache.cayenne.dba.AutoAdapter.getQuotingStrategy(AutoAdapter.java:206)
at org.apache.cayenne.access.trans.JoinStack.<init>(JoinStack.java:69)
at
org.apache.cayenne.access.trans.SelectTranslator.createJoinStack(SelectTranslator.java:102)
at
org.apache.cayenne.access.trans.SelectTranslator.getJoinStack(SelectTranslator.java:83)
at
org.apache.cayenne.access.trans.SelectTranslator.createSqlString(SelectTranslator.java:112)
at
cbe.fetching.utilities.AggregateTranslator.createSqlString(AggregateTranslator.java:72)
at
org.apache.cayenne.access.trans.QueryAssembler.createStatement(QueryAssembler.java:204)
at
cbe.fetching.utilities.AggregateUtils.getResultUsingTranslator(AggregateUtils.java:219)
... 3 more
Caused by: java.sql.SQLException: Can't obtain connection. Request timed
out. Total used connections: 1
at
org.apache.cayenne.conn.PoolManager.uncheckPooledConnection(PoolManager.java:454)
at org.apache.cayenne.conn.PoolManager.getConnection(PoolManager.java:382)
at org.apache.cayenne.conn.PoolManager.getConnection(PoolManager.java:371)
at
org.apache.cayenne.configuration.server.DefaultDbAdapterFactory.detectAdapter(DefaultDbAdapterFactory.java:97)
... 15 more




On 15 July 2016 at 16:17, Harunobu Oyama <[email protected]> wrote:

> Hi Michael,
>
> Thank you for your message. I will give it a try.
>
> As for "reading_id", yes it is the primary key and actually generated by
> using bigserial.
> While I was populating 3 billions of those, I wrote a throw-away code to
> assign the
> value from the Java code without spending time on sequence query. It did
> made the
> data population about 20% faster. The query was meant to be used to find
> out the
> initial value, but I even cheated to hard code the value this time.
>
> nobu
>
>
> On 15 July 2016 at 15:49, Michael Gentry <[email protected]> wrote:
>
>> Hi Nobu,
>>
>> I have an AggregateUtils that I use:
>>
>>
>> https://github.com/mrg/cbe/tree/master/FetchingObjects/Aggregates/src/main/java/cbe/fetching/utilities
>>
>> Here is an example of code using AggregateUtils:
>>
>>
>> https://github.com/mrg/cbe/blob/master/FetchingObjects/Aggregates/src/main/java/cbe/fetching/Aggregates.java
>>
>> To use it for your example would be something like this:
>>
>> SelectQuery query = new SelectQuery(Reading.class);
>> BigDecimal max = AggregateUtils.max(dataContext, query,
>> READING.READING_ID_PROPERTY);
>>
>> On a side note, I'm guessing "reading_id" is your primary key?  If so, why
>> are you trying to get the maximum value for it?  Is the primary key/id not
>> being generated by the database?
>>
>> mrg
>>
>>
>> On Fri, Jul 15, 2016 at 5:56 AM, Harunobu Oyama <[email protected]> wrote:
>>
>> > Hi,
>> >
>> > What is the Cayenne way to execute aggregate functions?
>> >
>> > For example, SELECT MAX("reading_id") FROM "reading" ?
>> >
>> > I tried passing SQLTemplate containing the SQL written above
>> > to performGenericQuery method, with no luck. Are we supposed to use
>> JDBC?
>> > If so, what is the best way to get the JDBC Connection?
>> >
>> > Any hint would be appreciated.
>> >
>> > thank you,
>> > nobu
>> >
>>
>
>

Reply via email to