openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Francesco Chicchiriccò <ilgro...@apache.org>
Subject Re: Unexpected 'right truncation' issue
Date Tue, 26 Apr 2016 11:22:39 GMT
On 26/04/2016 11:44, Sergey Beryozkin wrote:
> Hi All
>
> This is my first post to the list, I've tried to solve the issue 
> myself by checking StackOverflow, etc. I thought I'd give it a try at 
> OpenJPA users list, given that I do work with OpenJPA 2.4.0.
>
> I have the following class hierarchy (listing the most relevant details):
>
> @Entity
> public class Client {
>    private String clientId;
> }
>
>
> @Entity
> public class BearerAccessToken extends ServerAccessToken {
> }
>
> @MappedSuperclass
> public abstract class ServerAccessToken extends AccessToken {
>
> @ManyToOne
> private Client client;
> }
>
> @MappedSuperclass
> public abstract class AccessToken {
>
> @Id
> String tokenKey;
>
> @ElementCollection
> @MapKeyColumn(name="propName")
> private Map<String, String> parameters = new LinkedHashMap<String, 
> String>();
> }
>
>
> Now, after initializing the DB as follows:
>
> - Create Client instance (ex, "Client1"), add it to DB:
>   Client c1 = new Client("Client1"); // and save
> - Create another Client instance (ex, "Client2"), add it to DB:
>   Client c2 = new Client("Client2"); // and save
> - add a new BearerAccessToken associated with Client2 to DB:
>   BearerAccessToken at = new BearerAccessToken();
>   at.setClient(c2); // and save
>
> (Note no tokens are associated with Client1)
>
> the following sequence works OK:
>
> 1. delete Client2 (c2)
> 2. delete Client1 (c1)
>
> This is OK, but if I start from deleting Client1 (the one with no 
> tokens) I immediately see:
>
> Caused by: <openjpa-2.4.0-r422266:1674604 fatal general error> 
> org.apache.openjpa.persistence.PersistenceException: data exception: 
> string data, right truncation;  table: BEARERACCESSTOKEN_PARAMETERS 
> column: VALUE {prepstmnt 453026232 INSERT INTO 
> BearerAccessToken_parameters (BEARERACCESSTOKEN_TOKENKEY, propName, 
> value) VALUES (?, ?, ?)} [code=3401, state=22001]
>     at 
> org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:5001).
>
>
> I honestly do not know where to start looking. I've seen plenty of 
> StackOverflow messages about the "string data, right truncation", in 
> this case AccessToken.parameters map is never touched by my code, it 
> is empty. And the most confusing thing why this is even happening when 
> I delete a Client with no tokens associated with it.
>
> I suspect when the Client is deleted, given a Many to One relationship 
> from ServerAccessToken to Client (but no OneToMany from Client to 
> ServerAccessToken), the mapping table gets refreshed in order to find 
> any tokens which may be linking to Client being deleted). But that is 
> as far as I can get.
>
> Can someone please suggest why the above might be occurring, is it a 
> mapping issue, or possibly OpenJPA issue ?

Hi Sergey,
I'd start by trying to understand exactly which SQL statement generates 
the error above, so adding

<property name="openjpa.Log" value="SQL=TRACE"/>
<property name="openjpa.ConnectionFactoryProperties"
     value="PrettyPrint=true, PrettyPrintLineLength=72"/>

to your persistence.xml and trying again.

HTH
Regards.

-- 
Francesco Chicchiriccò

Tirasa - Open Source Excellence
http://www.tirasa.net/

Involved at The Apache Software Foundation:
member, Syncope PMC chair, Cocoon PMC, Olingo PMC, CXF committer
http://home.apache.org/~ilgrosso/


Mime
View raw message