isis-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andi Huber <ahu...@apache.org>
Subject Re: Simple composite key of ansi padded strings
Date Fri, 22 Jun 2018 07:25:15 GMT
One more error, sorry for that!

You need to use the 'url-safe' variants:

Base64.getUrlEncoder()
Base64.getUrlDecoder()


On 2018/06/22 06:49:36, Andi Huber <ahuber@apache.org> wrote: 
> 
> 
> On 2018/06/22 06:46:19, Andi Huber <ahuber@apache.org> wrote: 
> > You must define a Primary Key class of your own.
> > 
> > I'd suggest to take the 'PrimaryKey Example - Multiple Field' from the Datanucleus
Guide [1] as a starting point, but improve the marshalling logic such that arbitrary strings
within your PK columns are possible:
> > 
> > I believe, using ',' as the separator should not conflict with other logic;
> > 
> > 
> > private final static String SEPARATOR = ",";
> > 
> > 
> > /**
> >  * Constructor accepting same input as generated by toString().
> >  */
> > public ComposedIdKey(String value)
> > {
> > 	StringTokenizer token = new StringTokenizer (value, SEPARATOR);
> > 	this.targetClassName = token.nextToken();
> > 	this.field1 = new String(Base64.getDecoder().decode(token.nextToken()));
> > 	this.field2 = new String(Base64.getDecoder().decode(token.nextToken()));
> > }
> > 
> > ..
> > 
> > public String toString ()
> > {
> > 	// Give output expected by String constructor
> > 	
> > 	final String left  = Base64.getEncoder().encodeToString(this.field1);
> > 	final String right = Base64.getEncoder().encodeToString(this.field2);
> > 	
> > 	return this.targetClassName + this.field1 + SEPARATOR + this.field2;
> 
> .. I forgot a separator here, should be:
> return this.targetClassName + SEPARATOR + this.field1 + SEPARATOR + this.field2;
> 
> 
> > }
> > 
> > [1] http://www.datanucleus.org/products/accessplatform/jpa/mapping.html#identity
> > 
> > On 2018/06/21 20:09:20, Brian K <harvestmoon299@gmail.com> wrote: 
> > > Hello,
> > > 
> > > 
> > > 
> > > I’m modeling my domain objects over an existing sql server database.  One
> > > of my tables has a primary key that has two columns of type char(10).  The
> > > values that come from columns like this appear with trailing spaces.  The
> > > OID generated by Isis for a single column primary key works fine and shows
> > > urls such as
> > > http://localhost:8080/wicket/entity/dbo.courtcd:s_3AN-P%20%20%20%20%20 .
> > > 
> > > 
> > > When I have a table that has two fields like this as the primary key, I get
> > > this error:
> > > 
> > > Could not parse OID
> > > 'dbo.crtprecx:domainapp.modules.simple.dom.impl.CourtPrecinct_PK_3AN-P
> > >     :ANCHORAGE '; should match pattern:
> > > ^((([!*])?([^:~$\^#]+):([^:~$\^#]+))((~[^:~$\^#]+:[^:~$\^#]+)*))([$][^:~$\^#]+)?([\^](\d+):([^:~$\^#]+)?:(\d+)?)?$
> > > 
> > > Do I have to now create a primary key class to use the trimmed values
> > > of the string fields in the primary key, or is there another way to
> > > handle this?
> > > 
> > > Thank you!
> > > 
> > > Brian
> > > 
> > 
> 

Mime
View raw message