Glad you finally sorted it.
On 26 February 2014 16:34, james agada <[email protected]> wrote: > SOLVED: > 1. Fix SQL issues and ensure the columns are in the GROUP BY Clause if they > are not an aggregate > 2. Replace entity reference with direct column reference. it appears the > referenced objects have column in table with _ID_OID postfix > 3. Match the types for the entity reference column - they are BIGINT, > declare as Long. > > > On Wed, Feb 26, 2014 at 4:05 PM, james agada <[email protected]> wrote: > > > Oops. Fixed the missing comma but the error is still there in a different > > way > > > > integration.tests.actions.ToDoItemTest_completed Time elapsed: 0 sec > <<< > >> ERROR! > >> > >> java.lang.RuntimeException: > >> org.datanucleus.exceptions.NucleusDataStoreException: An exception was > >> thrown while adding/validating class(es) : user lacks privilege or > object > >> not found: fromParty > >> > >> java.sql.SQLSyntaxErrorException: user lacks privilege or object not > >> found: fromParty > >> > >> > >> > > > > > > On Wed, Feb 26, 2014 at 3:31 PM, Dan Haywood < > [email protected] > > > wrote: > > > >> You are still missing the comma before "fromParty" field in the SELECT > >> clause. > >> > >> @Extension(vendorName = "datanucleus", key = "view-definition", > >> > >> value = "CREATE VIEW \"DailySalesTotalForParty\" " + > >> > >> "( " + > >> > >> " {this.transactionDate}, " + > >> > >> " {this.totalAmount} " + > <<<<<<<<<<<<<< > >> HERE <<<<<<<<<<<<< > >> > >> " {this.fromParty} " + > >> > >> ") AS " + > >> > >> > >> > >> > >> On 26 February 2014 14:20, james agada <[email protected]> wrote: > >> > >> > This is my class - cleaned up > >> > > >> > /* > >> > > >> > * Licensed to the Apache Software Foundation (ASF) under one > >> > > >> > * or more contributor license agreements. See the NOTICE file > >> > > >> > * distributed with this work for additional information > >> > > >> > * regarding copyright ownership. The ASF licenses this file > >> > > >> > * to you under the Apache License, Version 2.0 (the > >> > > >> > * "License"); you may not use this file except in compliance > >> > > >> > * with the License. You may obtain a copy of the License at > >> > > >> > * > >> > > >> > * http://www.apache.org/licenses/LICENSE-2.0 > >> > > >> > * > >> > > >> > * Unless required by applicable law or agreed to in writing, > >> > > >> > * software distributed under the License is distributed on an > >> > > >> > * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > >> > > >> > * KIND, either express or implied. See the License for the > >> > > >> > * specific language governing permissions and limitations > >> > > >> > * under the License. > >> > > >> > */ > >> > > >> > > >> > package dom.todo; > >> > > >> > > >> > import java.math.BigDecimal; > >> > > >> > import java.util.List; > >> > > >> > > >> > import javax.jdo.annotations.Extension; > >> > > >> > import javax.jdo.annotations.IdentityType; > >> > > >> > import javax.jdo.annotations.InheritanceStrategy; > >> > > >> > > >> > import org.joda.time.LocalDate; > >> > > >> > > >> > import org.apache.isis.applib.AbstractViewModel; > >> > > >> > import org.apache.isis.applib.annotation.Bookmarkable; > >> > > >> > import org.apache.isis.applib.annotation.DescribedAs; > >> > > >> > import org.apache.isis.applib.annotation.Hidden; > >> > > >> > import org.apache.isis.applib.annotation.Immutable; > >> > > >> > import org.apache.isis.applib.annotation.Optional; > >> > > >> > import org.apache.isis.applib.annotation.Render; > >> > > >> > import org.apache.isis.applib.annotation.Render.Type; > >> > > >> > import org.apache.isis.applib.annotation.Title; > >> > > >> > > >> > > >> > > >> > @javax.jdo.annotations.PersistenceCapable( > >> > > >> > identityType = IdentityType.NONDURABLE, > >> > > >> > table = "DailySalesTotalForParty", > >> > > >> > extensions = { > >> > > >> > @Extension(vendorName = "datanucleus", key = > "view-definition", > >> > > >> > value = "CREATE VIEW \"DailySalesTotalForParty\" " + > >> > > >> > "( " + > >> > > >> > " {this.transactionDate}, " + > >> > > >> > " {this.totalAmount} " + > >> > > >> > " {this.fromParty} " + > >> > > >> > ") AS " + > >> > > >> > "SELECT " + > >> > > >> > " \"Transaction\".\"transactionDate\" , " + > >> > > >> > > >> > " SUM(\"Transaction\".\"faceValue\") AS > >> > \"totalAmount\" ," + > >> > > >> > " \"Transaction\".\"fromParty\" " + > >> > > >> > " FROM " + > >> > > >> > " \"Transaction\" " + > >> > > >> > "GROUP BY " + > >> > > >> > " \"transactionDate\", " + > >> > > >> > " \"fromParty\" " + > >> > > >> > "ORDER BY " + > >> > > >> > " \"transactionDate\" ") > >> > > >> > }) > >> > > >> > @javax.jdo.annotations.Inheritance(strategy = > >> > InheritanceStrategy.NEW_TABLE) > >> > > >> > @javax.jdo.annotations.Queries( { > >> > > >> > @javax.jdo.annotations.Query( > >> > > >> > name="DailySalesForParty", language="JDOQL", > >> > > >> > value="SELECT FROM dom.todo.DailySalesTotalForParty WHERE fromParty == > >> > :party ") > >> > > >> > }) > >> > > >> > @Bookmarkable > >> > > >> > @Immutable > >> > > >> > public class DailySalesTotalForParty { > >> > > >> > > >> > // ////////////////////////////////////// > >> > > >> > /** > >> > > >> > @javax.jdo.annotations.Column(allowsNull = "false") > >> > > >> > private String fromParty; > >> > > >> > > >> > /** > >> > > >> > * Lazily loaded from the {@link #getReference() reference}, > >> provides > >> > access > >> > > >> > * to the underlying {@link Property}. > >> > > >> > @Optional > >> > > >> > @Title(sequence = "1") > >> > > >> > public String getFromParty() { > >> > > >> > return fromParty; > >> > > >> > } > >> > > >> > > >> > public void setFromParty(final String party) { > >> > > >> > this.fromParty = party; > >> > > >> > } > >> > > >> > */ > >> > > >> > // ////////////////////////////////////// > >> > > >> > private java.math.BigInteger fromParty; > >> > > >> > @Optional > >> > > >> > public java.math.BigInteger getFromParty(){ > >> > > >> > return this.fromParty; > >> > > >> > } > >> > > >> > public void setFromParty_Party_ID_OID(java.math.BigInteger id ){ > >> > > >> > this.fromParty =id; > >> > > >> > } > >> > > >> > > >> > ////////////////////////////////////// > >> > > >> > private LocalDate transactionDate; > >> > > >> > > >> > @Title(sequence = "2", prepend = " - ") > >> > > >> > public LocalDate getTransactionDate() { > >> > > >> > return transactionDate; > >> > > >> > } > >> > > >> > > >> > public void setTransactionDate(final LocalDate dueDate) { > >> > > >> > this.transactionDate = dueDate; > >> > > >> > } > >> > > >> > > >> > // ////////////////////////////////////// > >> > > >> > > >> > private BigDecimal totalAmount; > >> > > >> > > >> > public BigDecimal getTotalAmount() { > >> > > >> > return totalAmount; > >> > > >> > } > >> > > >> > > >> > public void setTotalAmount(final BigDecimal total) { > >> > > >> > this.totalAmount = total; > >> > > >> > } > >> > > >> > > >> > > >> > > >> > // ////////////////////////////////////// > >> > > >> > > >> > /** @Render(Type.EAGERLY) > >> > > >> > public List<Transaction> getTransactions() { > >> > > >> > return transactions.findTransactionForPartyOnDate(getFromParty(), > >> > getTransactionDate()); > >> > > >> > } > >> > > >> > */ > >> > > >> > // ////////////////////////////////////// > >> > > >> > > >> > private Partytypes partytypes; > >> > > >> > > >> > final public void injectPartytypes(final Partytypes partytypes) { > >> > > >> > this.partytypes = partytypes; > >> > > >> > } > >> > > >> > > >> > private Transactions transactions; > >> > > >> > > >> > final public void injectTransactions(final Transactions > >> transactions) > >> > { > >> > > >> > this.transactions = transactions; > >> > > >> > } > >> > > >> > > >> > } > >> > > >> > > >> > This is the error > >> > > >> > > >> > 15:34:03,784 [Schema main DEBUG] CREATE VIEW > >> >> "DailySalesTotalForParty" ( "transactionDate", "totalAmount" > >> >> "fromParty" ) AS SELECT "Transaction"."transactionDate" , > >> >> SUM("Transaction"."faceValue") AS "totalAmount" , > >> >> "Transaction"."fromParty" FROM "Transaction" GROUP BY > >> >> "transactionDate", "fromParty" ORDER BY "transactionDate" > >> >> > >> >> 15:34:03,790 [Datastore main ERROR] Error thrown > >> >> executing CREATE VIEW "DailySalesTotalForParty" ( > "transactionDate", > >> >> "totalAmount" "fromParty" ) AS SELECT > >> "Transaction"."transactionDate" > >> >> , SUM("Transaction"."faceValue") AS "totalAmount" , > >> >> "Transaction"."fromParty" FROM "Transaction" GROUP BY > >> >> "transactionDate", "fromParty" ORDER BY "transactionDate" : > >> unexpected > >> >> token: fromParty required: ) > >> >> > >> >> java.sql.SQLSyntaxErrorException: unexpected token: fromParty > >> required: ) > >> >> > >> >> at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) > >> >> > >> >> at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) > >> >> > >> >> at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) > >> >> > >> >> at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) > >> >> > >> >> > >> > SQL seems ok, what am i missing? > >> > > >> > > >> > > >> > > >> > On Wed, Feb 26, 2014 at 1:46 PM, GESCONSULTOR - Óscar Bou < > >> > [email protected]> wrote: > >> > > >> >> Hi, James. > >> >> > >> >> I think that the GROUP BY clause should include all fields referenced > >> in > >> >> the SELECT that are not part of aggregation formulas (like SUM, AVG, > >> MIN, > >> >> MAX, etc.). > >> >> > >> >> As "Transaction"."fromParty_Party_ID_OID" is referenced on the SELECT > >> >> part without being included on any of those aggregation formulas, it > >> should > >> >> be included on the GROUP BY section. > >> >> > >> >> HTH, > >> >> > >> >> Oscar > >> >> > >> >> > >> >> > >> >> El 26/02/2014, a las 13:38, james agada <[email protected]> > >> escribió: > >> >> > >> >> Took your advice and got it to work when I do not have the fromParty > >> >> attribute. What could i be doing wrong. This is the error > >> >> > >> >> 47:29,831 [Schema main DEBUG] Check of > existence > >> of > >> >> > >> >> "DailySalesTotalForParty" returned no table > >> >> > >> >> 13:47:29,831 [Schema main DEBUG] Check of > >> existence > >> >> of "DailySalesTotalForParty" returned no table > >> >> > >> >> 13:47:29,831 [Schema main DEBUG] Creating table > >> >> "DailySalesTotalForParty" > >> >> > >> >> 13:47:29,831 [Schema main DEBUG] Creating table > >> >> "DailySalesTotalForParty" > >> >> > >> >> 13:47:29,831 [Schema main DEBUG] Creating table > >> >> "DailySalesTotalForParty" > >> >> > >> >> 13:47:29,832 [Schema main DEBUG] CREATE VIEW > >> >> "DailySalesTotalForParty" ( "transactionDate", "totalAmount" > >> >> "fromParty" ) AS SELECT "Transaction"."transactionDate" , > >> >> SUM("Transaction"."faceValue") AS "totalAmount" , > >> >> "Transaction"."fromParty_Party_ID_OID" AS "fromParty" FROM > >> >> "Transaction" GROUP BY "transactionDate" ORDER BY > "transactionDate" > >> >> > >> >> 13:47:29,832 [Schema main DEBUG] CREATE VIEW > >> >> "DailySalesTotalForParty" ( "transactionDate", "totalAmount" > >> >> "fromParty" ) AS SELECT "Transaction"."transactionDate" , > >> >> SUM("Transaction"."faceValue") AS "totalAmount" , > >> >> "Transaction"."fromParty_Party_ID_OID" AS "fromParty" FROM > >> >> "Transaction" GROUP BY "transactionDate" ORDER BY > "transactionDate" > >> >> > >> >> 13:47:29,832 [Schema main DEBUG] CREATE VIEW > >> >> "DailySalesTotalForParty" ( "transactionDate", "totalAmount" > >> >> "fromParty" ) AS SELECT "Transaction"."transactionDate" , > >> >> SUM("Transaction"."faceValue") AS "totalAmount" , > >> >> "Transaction"."fromParty_Party_ID_OID" AS "fromParty" FROM > >> >> "Transaction" GROUP BY "transactionDate" ORDER BY > "transactionDate" > >> >> > >> >> 13:47:29,833 [Datastore main ERROR] Error thrown > >> >> executing CREATE VIEW "DailySalesTotalForParty" ( > "transactionDate", > >> >> "totalAmount" "fromParty" ) AS SELECT > >> "Transaction"."transactionDate" > >> >> , SUM("Transaction"."faceValue") AS "totalAmount" , > >> >> "Transaction"."fromParty_Party_ID_OID" AS "fromParty" FROM > >> >> "Transaction" GROUP BY "transactionDate" ORDER BY > "transactionDate" > >> : > >> >> unexpected token: fromParty required: ) > >> >> > >> >> java.sql.SQLSyntaxErrorException: unexpected token: fromParty > >> required: ) > >> >> > >> >> at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) > >> >> > >> >> at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) > >> >> > >> >> at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) > >> >> > >> >> > >> >> > >> >> And this is the class now > >> >> > >> >> package dom.todo; > >> >> > >> >> > >> >> import java.math.BigDecimal; > >> >> > >> >> import java.util.List; > >> >> > >> >> > >> >> import javax.jdo.annotations.Extension; > >> >> > >> >> import javax.jdo.annotations.IdentityType; > >> >> > >> >> import javax.jdo.annotations.InheritanceStrategy; > >> >> > >> >> > >> >> import org.joda.time.LocalDate; > >> >> > >> >> > >> >> import org.apache.isis.applib.AbstractViewModel; > >> >> > >> >> import org.apache.isis.applib.annotation.Bookmarkable; > >> >> > >> >> import org.apache.isis.applib.annotation.DescribedAs; > >> >> > >> >> import org.apache.isis.applib.annotation.Hidden; > >> >> > >> >> import org.apache.isis.applib.annotation.Immutable; > >> >> > >> >> import org.apache.isis.applib.annotation.Optional; > >> >> > >> >> import org.apache.isis.applib.annotation.Render; > >> >> > >> >> import org.apache.isis.applib.annotation.Render.Type; > >> >> > >> >> import org.apache.isis.applib.annotation.Title; > >> >> > >> >> > >> >> > >> >> > >> >> /** > >> >> > >> >> * View model that provides a summary of the sales made on a given day > >> by > >> >> each party > >> >> > >> >> @javax.jdo.annotations.PersistenceCapable( > >> >> > >> >> identityType = IdentityType.NONDURABLE, > >> >> > >> >> table = "DailySalesTotalForParty", > >> >> > >> >> extensions = { > >> >> > >> >> @Extension(vendorName = "datanucleus", key = "view-definition", > >> >> > >> >> value = "CREATE VIEW \"DailySalesTotalForParty\" " + > >> >> > >> >> "( " + > >> >> > >> >> " {this.transactionDate}, " + > >> >> > >> >> " {this.fromParty}, " + > >> >> > >> >> " {this.transactiontype}, " + > >> >> > >> >> " {this.totalAmount} " + > >> >> > >> >> ") AS " + > >> >> > >> >> "SELECT " + > >> >> > >> >> " \"Tranaction\".\"transactionDate\" , " + > >> >> > >> >> " \"Transaction.\".\"fromParty\", " + > >> >> > >> >> " \"Transaction.\".\"transactiontype\", " + > >> >> > >> >> " SUM(\"Transaction\".\"facevalue\") AS \"totalAmount\", " + > >> >> > >> >> " FROM \"Transaction\" " + > >> >> > >> >> "GROUP BY " + > >> >> > >> >> " \"fromParty\", " + > >> >> > >> >> " \"transactionDate\" , " + > >> >> > >> >> " \"transactiontype\"" + > >> >> > >> >> "ORDER BY " + " \"fromParty\", " + > >> >> > >> >> " \"transactionDate\" , " + > >> >> > >> >> " \"transactiontype\"" ) > >> >> > >> >> }) > >> >> > >> >> > >> >> > >> >> */ > >> >> > >> >> @javax.jdo.annotations.PersistenceCapable( > >> >> > >> >> identityType = IdentityType.NONDURABLE, > >> >> > >> >> table = "DailySalesTotalForParty", > >> >> > >> >> extensions = { > >> >> > >> >> @Extension(vendorName = "datanucleus", key = > "view-definition", > >> >> > >> >> value = "CREATE VIEW \"DailySalesTotalForParty\" " + > >> >> > >> >> "( " + > >> >> > >> >> " {this.transactionDate}, " + > >> >> > >> >> " {this.totalAmount} " + > >> >> > >> >> " {this.fromParty} " + > >> >> > >> >> ") AS " + > >> >> > >> >> "SELECT " + > >> >> > >> >> " \"Transaction\".\"transactionDate\" , " + > >> >> > >> >> > >> >> " SUM(\"Transaction\".\"faceValue\") AS > >> >> \"totalAmount\" ," + > >> >> > >> >> " \"Transaction\".\"fromParty_Party_ID_OID\" AS > >> >> \"fromParty\" " + > >> >> > >> >> " FROM " + > >> >> > >> >> " \"Transaction\" " + > >> >> > >> >> "GROUP BY " + > >> >> > >> >> " \"transactionDate\" " + > >> >> > >> >> "ORDER BY " + > >> >> > >> >> " \"transactionDate\" ") > >> >> > >> >> }) > >> >> > >> >> @javax.jdo.annotations.Inheritance(strategy = > >> >> InheritanceStrategy.NEW_TABLE) > >> >> > >> >> @javax.jdo.annotations.Queries( { > >> >> > >> >> @javax.jdo.annotations.Query( > >> >> > >> >> name="DailySalesForParty", language="JDOQL", > >> >> > >> >> value="SELECT FROM dom.todo.DailySalesTotalForParty WHERE fromParty > == > >> >> :party ") > >> >> > >> >> }) > >> >> > >> >> @Bookmarkable > >> >> > >> >> @Immutable > >> >> > >> >> public class DailySalesTotalForParty { > >> >> > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> /** > >> >> > >> >> @javax.jdo.annotations.Column(allowsNull = "false") > >> >> > >> >> private String fromParty; > >> >> > >> >> > >> >> /** > >> >> > >> >> * Lazily loaded from the {@link #getReference() reference}, > >> provides > >> >> access > >> >> > >> >> * to the underlying {@link Property}. > >> >> > >> >> @Optional > >> >> > >> >> @Title(sequence = "1") > >> >> > >> >> public String getFromParty() { > >> >> > >> >> return fromParty; > >> >> > >> >> } > >> >> > >> >> > >> >> public void setFromParty(final String party) { > >> >> > >> >> this.fromParty = party; > >> >> > >> >> } > >> >> > >> >> */ > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> private java.math.BigInteger fromParty; > >> >> > >> >> @Optional > >> >> > >> >> public java.math.BigInteger getFromParty(){ > >> >> > >> >> return this.fromParty; > >> >> > >> >> } > >> >> > >> >> public void setFromParty_Party_ID_OID(java.math.BigInteger id ){ > >> >> > >> >> this.fromParty =id; > >> >> > >> >> } > >> >> > >> >> > >> >> ////////////////////////////////////// > >> >> > >> >> private LocalDate transactionDate; > >> >> > >> >> > >> >> @Title(sequence = "2", prepend = " - ") > >> >> > >> >> public LocalDate getTransactionDate() { > >> >> > >> >> return transactionDate; > >> >> > >> >> } > >> >> > >> >> > >> >> public void setTransactionDate(final LocalDate dueDate) { > >> >> > >> >> this.transactionDate = dueDate; > >> >> > >> >> } > >> >> > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> > >> >> private BigDecimal totalAmount; > >> >> > >> >> > >> >> public BigDecimal getTotalAmount() { > >> >> > >> >> return totalAmount; > >> >> > >> >> } > >> >> > >> >> > >> >> public void setTotalAmount(final BigDecimal total) { > >> >> > >> >> this.totalAmount = total; > >> >> > >> >> } > >> >> > >> >> > >> >> > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> > >> >> /** @Render(Type.EAGERLY) > >> >> > >> >> public List<Transaction> getTransactions() { > >> >> > >> >> return transactions.findTransactionForPartyOnDate(getFromParty(), > >> >> getTransactionDate()); > >> >> > >> >> } > >> >> > >> >> */ > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> > >> >> private Partytypes partytypes; > >> >> > >> >> > >> >> final public void injectPartytypes(final Partytypes partytypes) { > >> >> > >> >> this.partytypes = partytypes; > >> >> > >> >> } > >> >> > >> >> > >> >> private Transactions transactions; > >> >> > >> >> > >> >> final public void injectTransactions(final Transactions > >> transactions) { > >> >> > >> >> this.transactions = transactions; > >> >> > >> >> } > >> >> > >> >> > >> >> } > >> >> > >> >> > >> >> > >> >> On Mon, Feb 24, 2014 at 11:44 PM, Dan Haywood > >> >> <[email protected]>wrote: > >> >> > >> >> On 24 February 2014 21:38, james agada <[email protected]> wrote: > >> >> > >> >> You are right. It comes from this definition - not sure what is wrong > >> >> > >> >> with > >> >> > >> >> it > >> >> > >> >> I can see several issues, some trivial, some probably the cause... > >> >> > >> >> > >> >> If, once you've addressed these, there are still issues, then I > suggest > >> >> you > >> >> strip the class back to a single field, get that working, and then > >> build > >> >> it > >> >> up bit by bit... > >> >> > >> >> Dan > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> * /* * Licensed to the Apache Software Foundation (ASF) under one * > >> or > >> >> more contributor license agreements. See the NOTICE file * > >> distributed > >> >> with this work for additional information * regarding copyright > >> >> > >> >> ownership. > >> >> > >> >> The ASF licenses this file * to you under the Apache License, > Version > >> >> > >> >> 2.0 > >> >> > >> >> (the * "License"); you may not use this file except in compliance * > >> >> > >> >> with > >> >> > >> >> the License. You may obtain a copy of the License at * * > >> >> http://www.apache.org/licenses/LICENSE-2.0 > >> >> <http://www.apache.org/licenses/LICENSE-2.0> * * Unless required by > >> >> applicable law or agreed to in writing, * software distributed under > >> the > >> >> License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR > >> >> CONDITIONS OF ANY * KIND, either express or implied. See the > License > >> >> > >> >> for > >> >> > >> >> the * specific language governing permissions and limitations * > under > >> >> > >> >> the > >> >> > >> >> License. */* > >> >> > >> >> (trivial) you probably will want to change the license... > >> >> > >> >> > >> >> > >> >> > >> >> * package dom.todo;* > >> >> > >> >> (trivial) ... and the package > >> >> > >> >> > >> >> > >> >> [snip] > >> >> > >> >> > >> >> > >> >> /** > >> >> * View model that provides a summary of the sales made on a given day > >> by > >> >> each party > >> >> */ > >> >> @javax.jdo.annotations.PersistenceCapable( > >> >> identityType = IdentityType.NONDURABLE, > >> >> table = "DailySalesTotalForParty", > >> >> extensions = { > >> >> @Extension(vendorName = "datanucleus", key = > "view-definition", > >> >> value = "CREATE VIEW \"DailySalesTotalForParty\" " + > >> >> "( " + > >> >> " {this.transactionDate}, " + > >> >> > >> >> * " {this.fromPartyId}, " +* > >> >> > >> >> > >> >> I don't think JDO is clever enough to convert this id into a > reference > >> to > >> >> a > >> >> Party (how would it know?) So you should do what we did > >> >> in InvoiceSummaryForPropertyDueDate in Estatio (which is what I think > >> you > >> >> based this on) and make FromParty a derived field that does the > lookup > >> >> from > >> >> a (new) fromPartyId field. > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> * " {this.transactiontype}, " +* > >> >> > >> >> > >> >> there is no 'transactiontype' field on your class ... > >> >> > >> >> > >> >> > >> >> " {this.totalAmount} " + > >> >> ") AS " + > >> >> "SELECT " + > >> >> > >> >> * " \"Tranaction\".\"transactiondate\" , " +* > >> >> > >> >> > >> >> > >> >> the typo on this line "Tranaction". > >> >> > >> >> Also, I suggest keeping capitalization consistent, ie > transactionDate, > >> not > >> >> transactiondate. > >> >> > >> >> > >> >> > >> >> " \"Transaction.\".\"fromParty\", " + > >> >> " \"Transaction.\".\"transactiontype\", " > >> >> + > >> >> " SUM(\"Transaction\".\"facevalue\") AS > >> >> \"totalAmount\", " + > >> >> " FROM \"Transaction\" " + > >> >> "GROUP BY " + > >> >> " \"Transaction\".\"fromParty\", " + > >> >> " \"Transaction\".\"transactiondate\" , " + > >> >> " \"Transaction\".\"transactiontype\"" + > >> >> "ORDER BY " + " > >> >> \"Transaction\".\"fromParty\", " + > >> >> " \"Transaction\".\"transactiondate\" , " + > >> >> " \"Transaction\".\"transactiontype\"" ) > >> >> }) > >> >> @javax.jdo.annotations.Inheritance(strategy = > >> >> InheritanceStrategy.NEW_TABLE) > >> >> @javax.jdo.annotations.Queries( { > >> >> @javax.jdo.annotations.Query( > >> >> name="DailySalesForParty", > >> >> language="JDOQL", > >> >> value="SELECT FROM > >> >> dom.todo.DailySalesTotalForParty WHERE fromParty == :party ") > >> >> }) > >> >> @Bookmarkable > >> >> @Immutable > >> >> public class DailySalesTotalForParty { > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> > >> >> @javax.jdo.annotations.Column(allowsNull = "false") > >> >> private Party fromParty; > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> * /** * Lazily loaded from the {@link #getReference() > >> >> > >> >> reference}, > >> >> > >> >> provides access * to the underlying {@link Property}. */* > >> >> > >> >> > >> >> > >> >> This comment is from the Estatio code (but does describe what you > >> should > >> >> do > >> >> to resolve "FromParty"). > >> >> > >> >> > >> >> @Optional > >> >> @Title(sequence = "1") > >> >> public Party getFromParty() { > >> >> return fromParty; > >> >> } > >> >> > >> >> public void setFromParty(final Party party) { > >> >> this.fromParty = party; > >> >> } > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> private LocalDate transactionDate; > >> >> > >> >> @Title(sequence = "2", prepend = " - ") > >> >> public LocalDate getTransactionDate() { > >> >> return transactionDate; > >> >> } > >> >> > >> >> public void setTransactionDate(final LocalDate dueDate) { > >> >> this.transactionDate = dueDate; > >> >> } > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> private BigDecimal totalAmount; > >> >> > >> >> public BigDecimal getTotalAmount() { > >> >> return totalAmount; > >> >> } > >> >> > >> >> public void setTotalAmount(final BigDecimal total) { > >> >> this.totalAmount = total; > >> >> } > >> >> > >> >> > >> >> // ////////////////////////////////////// > >> >> > >> >> /** @Render(Type.EAGERLY) > >> >> public List<Transaction> getTransactions() { > >> >> return > >> transactions.findTransactionForPartyOnDate(getFromParty(), > >> >> getTransactionDate()); > >> >> } > >> >> **/ > >> >> // ////////////////////////////////////// > >> >> > >> >> private Partytypes partytypes; > >> >> > >> >> final public void injectPartytypes(final Partytypes partytypes) { > >> >> this.partytypes = partytypes; > >> >> } > >> >> > >> >> private Transactions transactions; > >> >> > >> >> final public void injectTransactions(final Transactions > >> >> > >> >> transactions) { > >> >> > >> >> this.transactions = transactions; > >> >> } > >> >> > >> >> } > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> Óscar Bou Bou > >> >> Responsable de Producto > >> >> Auditor Jefe de Certificación ISO 27001 en BSI > >> >> CISA, CRISC, APMG ISO 20000, ITIL-F > >> >> > >> >> 902 900 231 / 620 267 520 > >> >> http://www.twitter.com/oscarbou > >> >> > >> >> http://es.linkedin.com/in/oscarbou > >> >> > >> >> http://www.GesConsultor.com <http://www.gesconsultor.com/> > >> >> > >> >> > >> >> > >> >> Este mensaje y los ficheros anexos son confidenciales. Los mismos > >> >> contienen información reservada que no puede ser difundida. Si usted > ha > >> >> recibido este correo por error, tenga la amabilidad de eliminarlo de > su > >> >> sistema y avisar al remitente mediante reenvío a su dirección > >> electrónica; > >> >> no deberá copiar el mensaje ni divulgar su contenido a ninguna > persona. > >> >> Su dirección de correo electrónico junto a sus datos personales > constan > >> >> en un fichero titularidad de Gesdatos Software, S.L. cuya finalidad > es > >> la > >> >> de mantener el contacto con Ud. Si quiere saber de qué información > >> >> disponemos de Ud., modificarla, y en su caso, cancelarla, puede > hacerlo > >> >> enviando un escrito al efecto, acompañado de una fotocopia de su > >> D.N.I. a > >> >> la siguiente dirección: Gesdatos Software, S.L. , Paseo de la > >> Castellana, > >> >> 153 bajo - 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1ºC - > >> 46015 > >> >> (Valencia). Asimismo, es su responsabilidad comprobar que este > mensaje > >> o > >> >> sus archivos adjuntos no contengan virus informáticos, y en caso que > >> los > >> >> tuvieran eliminarlos. > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> > > >> > > > > >
