2013-02-10 71 views
0

Entity模样JPA:@Embedded实体如何将自己的类型作为字段?

@Entity 
public class Market extends MutableEntity { 

    @Column(nullable = false) 
    private String name; 
    @Column 
    private String description; 
    @Embedded 
    private Version marketVersion; ..snipped 

具有@Embedded Version作为

@Embeddable 
public class Version { 
    private String number; 
    private VersionType versionType; 
    private DateTime publishedOn; 
    private DateTime retiredOn; 
    private Version parentVersion; 

但失败

08:12:23.481 [main] DEBUG o.h.cfg.annotations.PropertyBinder - Building property number 
08:12:23.481 [main] DEBUG org.hibernate.cfg.Ejb3Column - Binding column: Ejb3Column{table=org.hibernate.mapping.Table(Market), mappingColumn=parentVersion, insertable=true, updatable=true, unique=false} 

    java.lang.StackOverflowError 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 
     at org.hibernate.cfg.AbstractPropertyHolder.getExactOverriddenColumn(AbstractPropertyHolder.java:179) 

这究竟是为什么以及如何解决这个问题?

回答

5

这是无法完成的。此外,它并没有什么太大的意义,以支持这样的结构,因为那时没有遏制地方结束的任何一点:Version包含Version,其中包含Version,其中包含Version

在JPA 2.0规范,这是告诉与以下文字:

不允许在可嵌入的 类之间直接或间接循环包含依赖项。

+0

我明白了,谢谢@Mikko,但是我可以通过'JPA'拥有包含'parentVersion'的'version'的方式是什么? – daydreamer 2013-02-10 18:27:12

+0

通常在这种情况下,版本是实体,并且具有ManyToOne关系自身(从小孩到父母)。如果需要双向关系,则另外OneToMany(集合值)向其他方向。 – 2013-02-10 18:34:26

相关问题