2010-12-27 3 views
4

J'ai une classe DateInterval qui est annotée avec @Embeddable et elle a deux champs persistants, startDate et endDate. Un champ DateInterval peut être facultatif en fonction de la classe persistante qui l'utilise. Si le champ DateInterval est facultatif, les champs startDate et endDate doivent être null. Comment implémenter ceci avec JPA 2 et/ou Hibernate?Rendre une classe @Embeddable facultative?

Si j'annotais directement les champs du DateInterval comme suit, alors TOUS les champs DateInterval ne seraient pas optionnels, ce qui n'est clairement pas ce que je veux.

@Embeddable 
class DateInterval { 
    @Column(nullable = false) 
    public Date getStartDate() { 
    } 
} 

J'ai essayé ce qui suit, mais cela n'a pas fonctionné.

class Foo { 
@Embedded 
@Column(nullable = true) 
    public DateInterval getDateInterval() { 
    } 
} 

Des suggestions? Merci!

Répondre

11

Vous devez utiliser @AttributeOverride (une seule colonne) ou @AttributeOverrides si plus d'un si vous vous passer outre les paramètres par défaut

Utilisez plutôt

public class Foo { 

    private DateInterval dateInterval; 

    @Embedded 
    @AttributeOverrides({ 
     @AttributeOverride(name="startDate", [email protected](nullable=true)), 
     @AttributeOverride(name="endDate", [email protected](nullable=true)) 
    }) 
    public DateInterval getDateInterval() { return this.dateInterval; } 
    public void setDateInterval(DateInterval dateInterval) { this.dateInterval = dateInterval; } 

} 
Questions connexes