avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sachin Goyal (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AVRO-1568) Allow Java polymorphism in Avro
Date Fri, 22 Aug 2014 02:05:11 GMT

    [ 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)

Mime
View raw message