[
https://issues.apache.org/jira/browse/OPENJPA-1683?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael Dick closed OPENJPA-1683.
---------------------------------
Resolution: Fixed
Please open another issue if there is more work to be done here.
> Why string encoding of OpenJPA Identity instances for LongId differes from
> other built-in identity types?
> ---------------------------------------------------------------------------------------------------------
>
> Key: OPENJPA-1683
> URL: https://issues.apache.org/jira/browse/OPENJPA-1683
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Reporter: Pinaki Poddar
> Assignee: Pinaki Poddar
> Fix For: 2.1.0
>
>
> How the built-in classes for persistent identity value encodes as itself as a
> String is critical/significant -- because
> a) the encoded string often is decoded to extract the original value for
> instance look up
> b) for untyped persistence capable instances, the encoded string carries the
> actual class name -- and hence is important to instantiate the actual
> instance during loading from database
> Unfortunately, this important decision about encoding-decoding of identity
> value is *not* emphasized with methods such as encode()/decode() on OpenJPAId
> but encoding is done with ubiquitous Object.toString() and decoding is
> burried in code lines.
>
> While it is perhaps important to review this scheme, the immediate issue at
> hand is somewhat narrower and as follows:
> The root *abstract* class OpenJPAId has the following toString()
> implementation
> public String toString() {
> return type.getName() + "-" + getIdObject();
> }
>
> The concrete implementation such as IntId or FloatId overwrites this
> behavior as follows:
> IntId.java:
> private final int key;
> public String toString() {
> return String.valueOf(key);
> }
> FloatId.java:
> private final float key;
> public String toString() {
> return Float.toString(key);
> }
> Apart from the subtle difference (but why), they look to be following the
> same principle, i.e. just stringify the value.
> But the interesting part is LongId *does not* have a toString() method.
> Hence its toString() form is dictated by its abstract super class OpenJPAId
> which appends the class name with a dash character to the actual long value
> of the identity.
> I can not figure out the reason of this anomaly for long identifier as
> opposed to other Short/Integer or Float etc.
> The risk of simply adding a toString() to LongId that is in line with
> other id types, of course, a) breaking any existing application that may be
> assuming the previous encoding
> b) the unknown original reason behind *not* overwriting LongId.toString()
> method
> Can someone please, please answer/shed some light?
> It is critical for some direction I am pursuing to support
> generic/templated types where exact types are not determinable at
> compile/design time.
> Without an answer, I will commit the change on LongId to have a toString()
> method.
> +
> + public String toString() {
> + return String.valueOf(key);
> + }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.