поведение вставляемых, обновляемых атрибутов, сохраняющих объект

У меня есть сущность, следующая

@Entity
@Table(name="DATMLAUENDCTT")
public class EnderecoContatoLaudoEntity implements Serializable {

    /** A Constante serialVersionUID. */
    private static final long serialVersionUID = 1L;

    /** O id. */
    @EmbeddedId
    private EnderecoContatoLaudoEntityPK id;

    /** O nome contato. */
    @Column(name="CTTNOM")
    private String nomeContato;

    /** O Codigo ddd telefone contato. */
    @Column(name="CTTTELDDDCOD")
    private BigDecimal codigoDDDTelefoneContato;

    /** O numero telefone contato. */
    @Column(name="CTTTELNUM")
    private BigDecimal numeroTelefoneContato;

    //bi-directional many-to-one association to TipoTelefoneEntity
    /** O tipo telefone entity. */
    @ManyToOne
    @JoinColumn(name="TELTIPSEQNUM",referencedColumnName="TELTIPSEQNUM")
    private TipoTelefoneEntity tipoTelefoneEntity;

    //bi-directional many-to-one association to EnderecoLaudoEntity
    /** O endereco laudo entity. */
    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="LAUSEQNUM", referencedColumnName="LAUSEQNUM"),
        @JoinColumn(name="ENDTIPSEQNUM", referencedColumnName="ENDTIPSEQNUM")
    })
    private EnderecoLaudoEntity enderecoLaudoEntity;

И это встроенный идентификатор следующим образом:

@Embeddable
public class EnderecoContatoLaudoEntityPK implements Serializable {
    //default serial version id, required for serializable classes.
    /** A Constante serialVersionUID. */
    private static final long serialVersionUID = 1L;

    /** Coloquei os nomes das colunas que não vieram quando foi gerada pelo RAD. */
    @Column(name = "LAUSEQNUM", insertable = false, updatable = false)
    private long numeroSequenciaLaudo;

    /** O numero sequencia tipo endereco. */
    @Column(name = "ENDTIPSEQNUM", insertable = false, updatable = false)
    private long numeroSequenciaTipoEndereco;

    /** O numero sequencia tipo telefone. */
    @Column(name = "TELTIPSEQNUM", insertable = false, updatable = false)
    private long numeroSequenciaTipoTelefone;

Мой вопрос: почему вставка не работает, когда я пытаюсь сохранить объект?

Ошибка говорит мне, что TELTIPSEQNUM имеет значение null. Но я устанавливаю объект tipoTelefoneEntity, который соответствует столбцу TELTIPSEQNUM.

Теперь, когда я удаляю insertable = false, updateable = false, вот так:

/** O numero sequencia tipo phone. */ @Column(name = "TELTIPSEQNUM") private long numeroSequenciaTipoTelefone;

Тогда постоянство работает.

Разве вставка не должна использовать TELTIPSEQNUM из объекта TipoTelefoneEntity, который находится вне встроенного объекта id?


person edubriguenti    schedule 03.06.2014    source источник


Ответы (1)


Просто, если вы используете

insertable = false

Клиент JPA не будет вставлять это значение в новый объект, как это должно работать Из документации:

public abstract boolean insertable
(Optional) Whether the column is included in SQL INSERT statements generated by the persistence provider
person rekiem87    schedule 03.06.2014
comment
Но в сущности EnderecoContatoLaudoEntity нет обновляемого и вставляемого свойства TipoTelefoneEntity, поэтому он должен добавить столбец в оператор, верно? Вот что я спрашиваю. @ManyToOne @JoinColumn(name=TELTIPSEQNUM,referencedColumnName=TELTIPSEQNUM) private TipoTelefoneEntity tipoTelefoneEntity; - person edubriguenti; 04.06.2014