You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by JimOR <ji...@clearviewcatv.net> on 2008/06/04 22:35:43 UTC

Problem Querying Entity With Field Declared as an Enum Array

I have an Entity class that contains a persisted field which is an array of
enum.  Whenever I attempt to query this entity, I receive an
org.apache.openjpa.persistence.ArgumentException, which seems to indicate
that we're trying to find a values() method on the array type.  Tests with
the field configured as a singleton work beautifully.

My use case is to provide persistence of ad-hoc report formats containing
columns selected from a fixed list, and I'd prefer to have a single table
row for each saved report in the db.

I'm wondering if I'm treading in unsupported ground, or am I missing
something in my enum/entity declaration.

I'm using OpenJPA 1.01 (embedded from OpenEJB 3.0) on WinXP/Java 1.5.0_14
with PostgreSQL 8.3.1

The entire stack trace is  http://www.nabble.com/file/p17656042/stacktrace
here , but the following lines look like the culprit:
Caused by: <openjpa-1.0.1-r420667:592145 fatal user error>
org.apache.openjpa.persistence.ArgumentException: null
at
org.apache.openjpa.jdbc.meta.strats.EnumValueHandler.map(EnumValueHandler.java:63)

and:
Caused by: java.lang.NoSuchMethodException:
[Lportfolio.data.entities.enums.Measure;.values()
	at java.lang.Class.getMethod(Class.java:1581)
	at
org.apache.openjpa.jdbc.meta.strats.EnumValueHandler.map(EnumValueHandler.java:60)

My entity defines the field as:
	@Column(nullable=false)
	@Basic( fetch = FetchType.EAGER ) 
	@Enumerated( EnumType.STRING ) 
	private Measure[] measures; 
	public Measure[] getMeasures() {
		return measures;
	}
	public void setMeasures(Measure[] measures) {
		this.measures = measures;
	}
and my enum declaration in part contains:
public enum Measure {
	ReInv ("Re-Invested", false),
	Invest ("Invested", false),
	Cost ("Cost", false),
	Value ("Value", false),
	AvgCost ("Avg Cost", true),
	
	private String description;
	private boolean perShare;
	private Measure(String desc, boolean per){
		this.description=desc;
		this.perShare=per;
	}
	public String desc(){return this.description;}
	public boolean pershare(){return this.perShare;}
}



-- 
View this message in context: http://www.nabble.com/Problem-Querying-Entity-With-Field-Declared-as-an-Enum-Array-tp17656042p17656042.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.


Re: Problem Querying Entity With Field Declared as an Enum Array

Posted by Fay Wang <fy...@yahoo.com>.
Apparently @Enumerated annotation does not apply to an array of enum values. When I take it away as shown below,

    @Column(nullable=false)
    @Basic( fetch = FetchType.EAGER )
    //@Enumerated( EnumType.STRING )
    private Measure[] measures;

I am able to persist the entity. Query also returns a correct array of enum values. According to the documentation, the @Enumerated annotation controls how the field maps to the database, i.e., String or Ordinal. For array and collection, the field is mapped to Blob in the database. 
  
-f

--- On Wed, 6/4/08, JimOR <ji...@clearviewcatv.net> wrote:

> From: JimOR <ji...@clearviewcatv.net>
> Subject: Problem Querying Entity With Field Declared as an Enum Array
> To: users@openjpa.apache.org
> Date: Wednesday, June 4, 2008, 1:35 PM
> I have an Entity class that contains a persisted field which
> is an array of
> enum.  Whenever I attempt to query this entity, I receive
> an
> org.apache.openjpa.persistence.ArgumentException, which
> seems to indicate
> that we're trying to find a values() method on the
> array type.  Tests with
> the field configured as a singleton work beautifully.
> 
> My use case is to provide persistence of ad-hoc report
> formats containing
> columns selected from a fixed list, and I'd prefer to
> have a single table
> row for each saved report in the db.
> 
> I'm wondering if I'm treading in unsupported
> ground, or am I missing
> something in my enum/entity declaration.
> 
> I'm using OpenJPA 1.01 (embedded from OpenEJB 3.0) on
> WinXP/Java 1.5.0_14
> with PostgreSQL 8.3.1
> 
> The entire stack trace is 
> http://www.nabble.com/file/p17656042/stacktrace
> here , but the following lines look like the culprit:
> Caused by: <openjpa-1.0.1-r420667:592145 fatal user
> error>
> org.apache.openjpa.persistence.ArgumentException: null
> at
> org.apache.openjpa.jdbc.meta.strats.EnumValueHandler.map(EnumValueHandler.java:63)
> 
> and:
> Caused by: java.lang.NoSuchMethodException:
> [Lportfolio.data.entities.enums.Measure;.values()
> 	at java.lang.Class.getMethod(Class.java:1581)
> 	at
> org.apache.openjpa.jdbc.meta.strats.EnumValueHandler.map(EnumValueHandler.java:60)
> 
> My entity defines the field as:
> 	@Column(nullable=false)
> 	@Basic( fetch = FetchType.EAGER ) 
> 	@Enumerated( EnumType.STRING ) 
> 	private Measure[] measures; 
> 	public Measure[] getMeasures() {
> 		return measures;
> 	}
> 	public void setMeasures(Measure[] measures) {
> 		this.measures = measures;
> 	}
> and my enum declaration in part contains:
> public enum Measure {
> 	ReInv ("Re-Invested", false),
> 	Invest ("Invested", false),
> 	Cost ("Cost", false),
> 	Value ("Value", false),
> 	AvgCost ("Avg Cost", true),
> 	
> 	private String description;
> 	private boolean perShare;
> 	private Measure(String desc, boolean per){
> 		this.description=desc;
> 		this.perShare=per;
> 	}
> 	public String desc(){return this.description;}
> 	public boolean pershare(){return this.perShare;}
> }
> 
> 
> 
> -- 
> View this message in context:
> http://www.nabble.com/Problem-Querying-Entity-With-Field-Declared-as-an-Enum-Array-tp17656042p17656042.html
> Sent from the OpenJPA Users mailing list archive at
> Nabble.com.