[JPA_SPEC-41] @Target Declaration for @Embedded Created: 17/Dec/12  Updated: 11/Apr/14

Status: Open
Project: jpa-spec
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: New Feature Priority: Major
Reporter: mquasten Assignee: ldemichiel
Resolution: Unresolved Votes: 3
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

Using an @Embedded inside an entity or an other Embedded isn't posible using an Interface for the Declaration of the field.

@Entity(name="NaturalPerson")
public class NaturalPersonImpl implements NaturalPerson{

@Column(length=50)
private final String firstname;

@Column(length=50)
private final String lastname;

@Embedded
@Target(NativityImpl.class) // This annotation is a hibernate Annotation, not a JPA Annotation, it shoud be take over in JPA
private final Nativity nativity;

public NaturalPersonImpl(final String firstname, final String lastname, final Nativity nativity)

{ this.firstname=firstname; this.lastname=lastname this.nativity=nativity; }

...
}

...

entityManager.persist(new NaturalPersonImpl("Kylie", "Minogue", new NativityImpl("Melborne", new GregorianCalendar(1968, 4, 28).getTime( ) );

Instead of the @Target (as it is done in native Hibernate) something like @Embedded(target=NativityImpl.class) is posible too (as it is done for the normal Relations @OneToMany, @ManyToOne , @ManyToMany

HardCoding the Implementation is bad, because Mocking with Mockito, EasyMock and so on is limited, when the implementations use final for example. Using the Hibernate Annotations avoid exchange interchangeability of the persistence provider. Specifieng abstract Classes in the target definition may me not possible, because the type can not be resoved reading the values back from database (because it isn't defined like by entities where the implementation is stored in the database). But simple cases without polymorhism should be possible.



 Comments   
Comment by Paul Benedict [ 11/Apr/14 ]

I agree with the analysis that adding @Embedded(target=...) would be better than a new annotation. It aligns nicely with @Column(targetEntity=...)

Generated at Fri Aug 26 00:12:13 UTC 2016 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.