[ 
https://issues.apache.org/jira/browse/OPENJPA-3073?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18141868#comment-18141868
 ] 

ASF subversion and git services commented on OPENJPA-3073:
----------------------------------------------------------

Commit b3d9e08ff3b992dc7f5594ba6f42d1edd4bb8b22 in openjpa's branch 
refs/heads/OPENJPA-3073 from Richard Zowalla
[ https://gitbox.apache.org/repos/asf?p=openjpa.git;h=b3d9e08ff ]

[OPENJPA-3073] Map an attribute of a non-serializable interface type through 
its auto-apply converter

JavaTypes gives an interface that does not extend Serializable the type
code PC_UNTYPED, not OBJECT, so an attribute declared with such an
interface stayed out of the mapping without an annotation and failed with
@Basic, even with an auto-apply converter of exactly that interface.
isAutoApplyConverted() now accepts PC_UNTYPED as well, and parseBasic()
gives a converted attribute of that type code the type code OBJECT, so
that the kernel no longer treats the converted value as a relation to an
entity and tries to cascade to it.


> Attribute of a non-Serializable type converted only by an autoApply converter 
> is silently left out of the mapping
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-3073
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-3073
>             Project: OpenJPA
>          Issue Type: Bug
>            Reporter: Richard Zowalla
>            Assignee: Richard Zowalla
>            Priority: Major
>             Fix For: 4.2.0
>
>
> Description:
> An entity or embeddable attribute whose type does not implement 
> java.io.Serializable (for example a final value class or a record) and that 
> has no mapping annotation is not persisted, even though a 
> @Converter(autoApply = true) AttributeConverter<X, Y> is registered for its 
> type. OpenJPA only logs 'Fields "..." are not a default persistent type, and 
> do not have any annotations indicating their persistence strategy. They will 
> be treated as non-persistent.' The attribute gets no column, its value is 
> lost on persist, JPQL that references it fails with 'No field named "..."', 
> and the metamodel has no such attribute. If the attribute is declared @Basic 
> instead, the persistence unit fails with 'The type of field "..." isn't 
> supported by declared persistence strategy "Basic"'.
>  
> Example:
>   public record Weight(long grams) \{ }
>   @Converter(autoApply = true)
>   public class WeightConverter implements AttributeConverter<Weight, Long> \{ 
> ... }
>   @Entity public class Parcel \{ @Id long id; Weight weight; }   // weight is 
> never stored
>  
> Jakarta Persistence 3.2, section 3.9: "A converted attribute is considered a 
> basic attribute, since, with the aid of the converter, its values can be 
> represented as instances of a basic type" and "If the value of the autoApply 
> element of the Converter annotation is true, the converter is automatically 
> applied to all attributes of the target type".
>  
> Cause: 
> PersistenceMetaDataDefaults.getPersistenceStrategy()/isDefaultPersistent() 
> decide whether an unannotated attribute is persistent without looking at the 
> auto-apply converter registry of the MetaDataRepository. They only accept 
> basic types, enums, embeddables, Serializable types and an explicit @Convert. 
> The registry is only used later, in FieldMetaData.resolve(), and only for 
> fields that are already persistent. 
> AnnotationPersistenceMetaDataParser.parseBasic() likewise rejects @Basic on 
> such a type.
>  
> Fix: such an attribute becomes a basic attribute mapped through its 
> auto-apply converter, with a column of the converter's database type. This 
> applies to field and property access and inside embeddables. Identifier, 
> version, @Enumerated and @Temporal attributes and attributes with their own 
> @Convert (including disableConversion = true) are excluded, as the 
> specification requires. An attribute of such a type without any converter is 
> still left out with a warning.
>  
> Upgrade



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to