tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Richard Yunhua Sang
Hi there,

I am using a Grid with JpaGridDataSource; when I click sort icon on a
transient field of an entity, I get following exception:

Caused by: java.lang.IllegalArgumentException: Unable to resolve attribute
[name] against path
 at
org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:118)
 at
org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:223)
 at
org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:194)
 at
org.apache.tapestry5.jpa.JpaGridDataSource.prepare(JpaGridDataSource.java:98)
 at
org.apache.tapestry5.corelib.components.Grid$CachingDataSource.prepare(Grid.java:311)
 at
org.apache.tapestry5.corelib.components.Grid.setupDataSource(Grid.java:481)
 at org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java:445)
 at
org.apache.tapestry5.corelib.components.Grid$Shim_415c794d27985.invoke(Unknown
Source)
 at
org.apache.tapestry5.internal.plastic.MethodHandleImpl.invoke(MethodHandleImpl.java:48)
 at
org.apache.tapestry5.internal.transform.BridgeClassTransformation$WrapMethodHandleAsMethodAccess.invoke(BridgeClassTransformation.java:85)
 at
org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$Invoker.invoke(RenderPhaseMethodWorker.java:117)
 at
org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$RenderPhaseMethodAdvice.advise(RenderPhaseMethodWorker.java:86)
 at
org.apache.tapestry5.internal.transform.BridgeClassTransformation$WrapMethodAdviceAsComponentMethodAdvice.advise(BridgeClassTransformation.java:349)
 at
org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:86)
 at org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java)
 at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:230)
 at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:191)
Also can JpaGridDataSource provide the way to sort the result at local
instead of database?

Overall it's pleasant to work with JPA module, thanks a lot for the great
job!

Yunhua


Re: tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Igor Drobiazko
Can you please provide more details? Perfectly some source code to reproduce
the issue.

On Mon, Jul 11, 2011 at 11:06 PM, Richard Yunhua Sang yunhua.s...@gmail.com
 wrote:

 Hi there,

 I am using a Grid with JpaGridDataSource; when I click sort icon on a
 transient field of an entity, I get following exception:

 Caused by: java.lang.IllegalArgumentException: Unable to resolve attribute
 [name] against path
  at

 org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:118)
  at

 org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:223)
  at

 org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:194)
  at

 org.apache.tapestry5.jpa.JpaGridDataSource.prepare(JpaGridDataSource.java:98)
  at

 org.apache.tapestry5.corelib.components.Grid$CachingDataSource.prepare(Grid.java:311)
  at
 org.apache.tapestry5.corelib.components.Grid.setupDataSource(Grid.java:481)
  at org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java:445)
  at

 org.apache.tapestry5.corelib.components.Grid$Shim_415c794d27985.invoke(Unknown
 Source)
  at

 org.apache.tapestry5.internal.plastic.MethodHandleImpl.invoke(MethodHandleImpl.java:48)
  at

 org.apache.tapestry5.internal.transform.BridgeClassTransformation$WrapMethodHandleAsMethodAccess.invoke(BridgeClassTransformation.java:85)
  at

 org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$Invoker.invoke(RenderPhaseMethodWorker.java:117)
  at

 org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$RenderPhaseMethodAdvice.advise(RenderPhaseMethodWorker.java:86)
  at

 org.apache.tapestry5.internal.transform.BridgeClassTransformation$WrapMethodAdviceAsComponentMethodAdvice.advise(BridgeClassTransformation.java:349)
  at

 org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:86)
  at org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java)
  at

 org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:230)
  at

 org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:191)
 Also can JpaGridDataSource provide the way to sort the result at local
 instead of database?

 Overall it's pleasant to work with JPA module, thanks a lot for the great
 job!

 Yunhua




-- 
Best regards,

Igor Drobiazko
http://tapestry5.de


Re: tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Thiago H. de Paula Figueiredo
On Mon, 11 Jul 2011 18:06:17 -0300, Richard Yunhua Sang  
yunhua.s...@gmail.com wrote:



Hi there,


Hi!


I am using a Grid with JpaGridDataSource; when I click sort icon on a
transient field of an entity, I get following exception:


I don't think any GridDataSource implementation backed by a database would  
be able to handle transient properties, so you should set their  
corresponding PropertyModel's as unsortable. To get the PropertyModel,  
create a BeanModel for you entity class using the BeanModelSource service  
and use its get() method.


--
Thiago H. de Paula Figueiredo
Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,  
and instructor

Owner, Ars Machina Tecnologia da Informação Ltda.
http://www.arsmachina.com.br

-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org



Re: tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Richard Yunhua Sang
Thanks for your reply, but I do want to sort the result by transient field
in Grid. It would be appreciated that the JPAGridDataSource is able to sort
the result within JVM.

On Mon, Jul 11, 2011 at 5:29 PM, Thiago H. de Paula Figueiredo 
thiag...@gmail.com wrote:

 On Mon, 11 Jul 2011 18:06:17 -0300, Richard Yunhua Sang 
 yunhua.s...@gmail.com wrote:

  Hi there,


 Hi!


  I am using a Grid with JpaGridDataSource; when I click sort icon on a
 transient field of an entity, I get following exception:


 I don't think any GridDataSource implementation backed by a database would
 be able to handle transient properties, so you should set their
 corresponding PropertyModel's as unsortable. To get the PropertyModel,
 create a BeanModel for you entity class using the BeanModelSource service
 and use its get() method.

 --
 Thiago H. de Paula Figueiredo
 Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
 and instructor
 Owner, Ars Machina Tecnologia da Informação Ltda.
 http://www.arsmachina.com.br



Re: tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Richard Yunhua Sang
HI Igor,

I have a small Maven project to demonstrate this problem, can I send it as a
zip file to your personal gmail address?

Thanks,
Yunhua


On Mon, Jul 11, 2011 at 5:19 PM, Igor Drobiazko igor.drobia...@gmail.comwrote:

 Can you please provide more details? Perfectly some source code to
 reproduce
 the issue.

 On Mon, Jul 11, 2011 at 11:06 PM, Richard Yunhua Sang 
 yunhua.s...@gmail.com
  wrote:

  Hi there,
 
  I am using a Grid with JpaGridDataSource; when I click sort icon on a
  transient field of an entity, I get following exception:
 
  Caused by: java.lang.IllegalArgumentException: Unable to resolve
 attribute
  [name] against path
   at
 
 
 org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:118)
   at
 
 
 org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:223)
   at
 
 
 org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:194)
   at
 
 
 org.apache.tapestry5.jpa.JpaGridDataSource.prepare(JpaGridDataSource.java:98)
   at
 
 
 org.apache.tapestry5.corelib.components.Grid$CachingDataSource.prepare(Grid.java:311)
   at
 
 org.apache.tapestry5.corelib.components.Grid.setupDataSource(Grid.java:481)
   at
 org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java:445)
   at
 
 
 org.apache.tapestry5.corelib.components.Grid$Shim_415c794d27985.invoke(Unknown
  Source)
   at
 
 
 org.apache.tapestry5.internal.plastic.MethodHandleImpl.invoke(MethodHandleImpl.java:48)
   at
 
 
 org.apache.tapestry5.internal.transform.BridgeClassTransformation$WrapMethodHandleAsMethodAccess.invoke(BridgeClassTransformation.java:85)
   at
 
 
 org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$Invoker.invoke(RenderPhaseMethodWorker.java:117)
   at
 
 
 org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$RenderPhaseMethodAdvice.advise(RenderPhaseMethodWorker.java:86)
   at
 
 
 org.apache.tapestry5.internal.transform.BridgeClassTransformation$WrapMethodAdviceAsComponentMethodAdvice.advise(BridgeClassTransformation.java:349)
   at
 
 
 org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:86)
   at org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java)
   at
 
 
 org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:230)
   at
 
 
 org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:191)
  Also can JpaGridDataSource provide the way to sort the result at local
  instead of database?
 
  Overall it's pleasant to work with JPA module, thanks a lot for the great
  job!
 
  Yunhua
 



 --
 Best regards,

 Igor Drobiazko
 http://tapestry5.de



Re: tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Taha Hafeez
Hi Richard,

Internally JPAGridDataSource does not handle sorting itself, instead it
delegates it to JPA and transient values are unknown to JPA. If you want to
handle transient values, you will have to write you own implementation of
GridDataSource where in you can retrieve all the rows from the database and
based on the SortConstraints passed to prepare() method, sort the values
yourself.

regards
Taha

On Tue, Jul 12, 2011 at 4:58 AM, Richard Yunhua Sang
yunhua.s...@gmail.comwrote:

 Thanks for your reply, but I do want to sort the result by transient field
 in Grid. It would be appreciated that the JPAGridDataSource is able to sort
 the result within JVM.

 On Mon, Jul 11, 2011 at 5:29 PM, Thiago H. de Paula Figueiredo 
 thiag...@gmail.com wrote:

  On Mon, 11 Jul 2011 18:06:17 -0300, Richard Yunhua Sang 
  yunhua.s...@gmail.com wrote:
 
   Hi there,
 
 
  Hi!
 
 
   I am using a Grid with JpaGridDataSource; when I click sort icon on a
  transient field of an entity, I get following exception:
 
 
  I don't think any GridDataSource implementation backed by a database
 would
  be able to handle transient properties, so you should set their
  corresponding PropertyModel's as unsortable. To get the PropertyModel,
  create a BeanModel for you entity class using the BeanModelSource service
  and use its get() method.
 
  --
  Thiago H. de Paula Figueiredo
  Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
  and instructor
  Owner, Ars Machina Tecnologia da Informação Ltda.
  http://www.arsmachina.com.br
 



Re: tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Richard Yunhua Sang
Hi Taha,

I have no problem to write a new GridDataSource to do such thing; but as I
said, it would be good to have this function in JPAGridDataSource.

e.g.

@Entity
public class Student {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String firstName;

private String lastName;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

@Transient
public String getName() {
return firstName +   + lastName;
}

}

The users may want to show name only, and want to sort the list by name
naturally.

Thanks,
Yunhua



On Mon, Jul 11, 2011 at 7:43 PM, Taha Hafeez tawus.tapes...@gmail.comwrote:

 Hi Richard,

 Internally JPAGridDataSource does not handle sorting itself, instead it
 delegates it to JPA and transient values are unknown to JPA. If you want to
 handle transient values, you will have to write you own implementation of
 GridDataSource where in you can retrieve all the rows from the database and
 based on the SortConstraints passed to prepare() method, sort the values
 yourself.

 regards
 Taha

 On Tue, Jul 12, 2011 at 4:58 AM, Richard Yunhua Sang
 yunhua.s...@gmail.comwrote:

  Thanks for your reply, but I do want to sort the result by transient
 field
  in Grid. It would be appreciated that the JPAGridDataSource is able to
 sort
  the result within JVM.
 
  On Mon, Jul 11, 2011 at 5:29 PM, Thiago H. de Paula Figueiredo 
  thiag...@gmail.com wrote:
 
   On Mon, 11 Jul 2011 18:06:17 -0300, Richard Yunhua Sang 
   yunhua.s...@gmail.com wrote:
  
Hi there,
  
  
   Hi!
  
  
I am using a Grid with JpaGridDataSource; when I click sort icon on a
   transient field of an entity, I get following exception:
  
  
   I don't think any GridDataSource implementation backed by a database
  would
   be able to handle transient properties, so you should set their
   corresponding PropertyModel's as unsortable. To get the PropertyModel,
   create a BeanModel for you entity class using the BeanModelSource
 service
   and use its get() method.
  
   --
   Thiago H. de Paula Figueiredo
   Independent Java, Apache Tapestry 5 and Hibernate consultant,
 developer,
   and instructor
   Owner, Ars Machina Tecnologia da Informação Ltda.
   http://www.arsmachina.com.br
  
 



Re: tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Taha Hafeez
Imagine the implementation

if(there_is_a_transient_field)
{
   populate_all_data();
   sort_yourself_based_on_sort_constraint();
   paginate();
}
else
{
   pass_the_paging_and_sort_constraints_to_jpa();
}

Instead you already have a JPAGridDataSource and you can have your own
JPAInMemoryGridDataSource implementation :)

regards
Taha


On Tue, Jul 12, 2011 at 5:28 AM, Richard Yunhua Sang
yunhua.s...@gmail.comwrote:

 Hi Taha,

 I have no problem to write a new GridDataSource to do such thing; but as I
 said, it would be good to have this function in JPAGridDataSource.

 e.g.

 @Entity
 public class Student {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String firstName;

private String lastName;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

@Transient
public String getName() {
return firstName +   + lastName;
}

 }

 The users may want to show name only, and want to sort the list by name
 naturally.

 Thanks,
 Yunhua



 On Mon, Jul 11, 2011 at 7:43 PM, Taha Hafeez tawus.tapes...@gmail.com
 wrote:

  Hi Richard,
 
  Internally JPAGridDataSource does not handle sorting itself, instead it
  delegates it to JPA and transient values are unknown to JPA. If you want
 to
  handle transient values, you will have to write you own implementation of
  GridDataSource where in you can retrieve all the rows from the database
 and
  based on the SortConstraints passed to prepare() method, sort the values
  yourself.
 
  regards
  Taha
 
  On Tue, Jul 12, 2011 at 4:58 AM, Richard Yunhua Sang
  yunhua.s...@gmail.comwrote:
 
   Thanks for your reply, but I do want to sort the result by transient
  field
   in Grid. It would be appreciated that the JPAGridDataSource is able to
  sort
   the result within JVM.
  
   On Mon, Jul 11, 2011 at 5:29 PM, Thiago H. de Paula Figueiredo 
   thiag...@gmail.com wrote:
  
On Mon, 11 Jul 2011 18:06:17 -0300, Richard Yunhua Sang 
yunhua.s...@gmail.com wrote:
   
 Hi there,
   
   
Hi!
   
   
 I am using a Grid with JpaGridDataSource; when I click sort icon on
 a
transient field of an entity, I get following exception:
   
   
I don't think any GridDataSource implementation backed by a database
   would
be able to handle transient properties, so you should set their
corresponding PropertyModel's as unsortable. To get the
 PropertyModel,
create a BeanModel for you entity class using the BeanModelSource
  service
and use its get() method.
   
--
Thiago H. de Paula Figueiredo
Independent Java, Apache Tapestry 5 and Hibernate consultant,
  developer,
and instructor
Owner, Ars Machina Tecnologia da Informação Ltda.
http://www.arsmachina.com.br
   
  
 



Re: tapestry-jpa: JpaGridDataSource sort by a transient field

2011-07-11 Thread Tony Nelson
We solved a similar problem by creating a view that calculated the field 
instead of using a transient field.

Then we just mapped the view as a read only object and all the sorting worked.

-Tony

On Jul 11, 2011, at 7:28 PM, Richard Yunhua Sang wrote:

 Thanks for your reply, but I do want to sort the result by transient field
 in Grid. It would be appreciated that the JPAGridDataSource is able to sort
 the result within JVM.
 
 On Mon, Jul 11, 2011 at 5:29 PM, Thiago H. de Paula Figueiredo 
 thiag...@gmail.com wrote:
 
 On Mon, 11 Jul 2011 18:06:17 -0300, Richard Yunhua Sang 
 yunhua.s...@gmail.com wrote:
 
 Hi there,
 
 
 Hi!
 
 
 I am using a Grid with JpaGridDataSource; when I click sort icon on a
 transient field of an entity, I get following exception:
 
 
 I don't think any GridDataSource implementation backed by a database would
 be able to handle transient properties, so you should set their
 corresponding PropertyModel's as unsortable. To get the PropertyModel,
 create a BeanModel for you entity class using the BeanModelSource service
 and use its get() method.
 
 --
 Thiago H. de Paula Figueiredo
 Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
 and instructor
 Owner, Ars Machina Tecnologia da Informação Ltda.
 http://www.arsmachina.com.br
 


-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org