Дополнительные методы в сущности Seam - PullRequest
0 голосов
/ 13 марта 2012

Я хотел бы добавить несколько дополнительных методов к сущности Seam.Эти методы не имеют собственного столбца в базе данных.Они просто форматируют и объединяют некоторые столбцы.

@Entity
@Table(name = "event", schema = "public")
public class Event implements java.io.Serializable {

    // [...]

    @Column(name = "status", nullable = false, length = 13)
    @NotNull
    @Length(max = 13)
    private String status;

    public String getStatus() {
        return this.status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getSpecialStatus() { // not allowed as there is no setter and no column 'specialStatus'
        return someValue;
    }

    // [...]
}

Этот код вызывает следующее исключение:

javax.persistence.PersistenceException: org.hibernate.PropertyNotFoundException: Could not find a setter for property specialStatus in class foobar.entity.Event

Я пытался добавить следующий установщик:

private void setSpecialStatus(String status){
    throw new NotImplementedException();
}

Исключение меняется на:

javax.persistence.PersistenceException: org.hibernate.HibernateException: Missing column: specialStatus in public.event

Кто-нибудь знает, есть ли способ решить эту проблему?Или это плохая практика добавлять дополнительные методы к сущности?(Если да, то как мне это реализовать?)

1 Ответ

1 голос
/ 13 марта 2012

Я не уверен, как это повлияет на использование вами аннотаций на полях, но если вы аннотируете свои методы получения, вы можете использовать аннотацию @Transient, чтобы сообщить Hibernate, что это не должно сохраняться.

@Transient
public String getSpecialStatus() { 
    return someValue;
}
...