2013-03-04 2 views
1

У меня есть объект JPA, который использует столбец дискриминатора. Но мне нужно получить доступ к значению дискриминатора как одно из полей объекта. Как мне это. Если я создаю метод, который соответствует столбцу дискриминатора я получаю следующую ошибку во время развертывания:Получение значения столбца дискриминатора

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.example.PortEntity column: type (should be mapped with insert="false" update="false") 

Определение объекта:

@Entity(name="Port") 
@DiscriminatorColumn(name="type", 
     discriminatorType=DiscriminatorType.STRING, 
     length=10) 
@DiscriminatorValue(value="port") 
@Table(name="vPorts") 
@XmlRootElement(name="port") 
public class PortEntity { 

    ... 

    @Column(name="type", length=20, insert=false, update="false") 
    @XmlAttribute(name="type") 
    public String getType() { ... } 

    public void setType(String newType) {... } 

    ... 

    @Entity(name="SeaPort") 
    @DiscriminatorValue(value="seaport") 
    @XmlRootElement(name="seaport") 
    public static class Sea 
    extends PortEntity { ... } 



    @Entity(name="AirPort") 
    @DiscriminatorValue(value="seaport") 
    @XmlRootElement(name="seaport") 
    public static class Air 
    extends PortEntity { ... } 

} 

ответ

1

Если вы хотите значение доступа @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=10) вы можете просто добавить метод, как :

@Transient 
public String getDecriminatorValue() { 
    return limitString(this.getClass().getName(), 10); 
} 

если вы хотите получить доступ к нему в JQPL запросов вам нужно использовать TYPE оператор: SELECT pe FROM PortEntity as pe WHERE TYPE(pe) = SomePortEntity

6
@Transient 
public String getDecriminatorValue() { 
    return this.getClass().getAnnotation(DiscriminatorValue.class).value(); 
} 
+0

Большое спасибо. Этот проект давно уже давно, но знание всегда полезно. – Dobbo

Смежные вопросы