[
https://issues.apache.org/jira/browse/AVRO-1568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14106352#comment-14106352
]
Sachin Goyal commented on AVRO-1568:
------------------------------------
Doug Cutting's reply:
One way to handle polymorphism in Avro is with unions.
For example, if you're using reflect, you can annotate your abstract base class
with the set of concrete classes that implement it, e.g.:
{code}
@Union(Concrete1.class, Concrete2.class)
class AbstractBase { ... }
{code}
Then Avro reflect will use this union schema for all references to the
AbstractBase type.
> Allow Java polymorphism in Avro
> -------------------------------
>
> Key: AVRO-1568
> URL: https://issues.apache.org/jira/browse/AVRO-1568
> Project: Avro
> Issue Type: New Feature
> Affects Versions: 1.7.6
> Reporter: Sachin Goyal
>
> A large number of Java designs interacting with databases with
> Hibernate/Couchbase (perhaps, even otherwise) have Java polymorphism of the
> form:
> {code:java}
> class Base
> {
> Integer a = 5;
> }
> class Derived extends Base
> {
> String b = "Foo";
> }
> class PolymorphicDO
> {
> Base b = new Derived();
> }
> {code}
> Jackson handles this kind of field by using annotations such as:
> {code}
> @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include =
> JsonTypeInfo.As.PROPERTY, property = "@class”)
> {code}
> If such a thing can be added to Avro, all those Java designs could become
> immediately usable with Avro. They would also become Hadoop compatible due to
> AvroSerde.
--
This message was sent by Atlassian JIRA
(v6.2#6252)