Como persistir uma entidade que contém um campo de tipo de usuário usando JPA2

StackOverflow https://stackoverflow.com/questions/2492160

  •  21-09-2019
  •  | 
  •  

Pergunta

Estou procurando uma maneira de persistir uma entidade que contém um campo de um tipo de usuário. Neste exemplo em particular, gostaria de persistir o ts campo como número de milissegundos.

import org.joda.time.DateTime;

@Entity
public class Foo {

  @Id
  private Long id;

  private DateTime ts;
}
Foi útil?

Solução

A JPA não tem a capacidade de registrar tipos de propriedades personalizadas, você precisará usar coisas específicas do provedor:

Outras dicas

Como não é um tipo de suporte definido pela JPA, você confia nas especificidades de implementação. O DataNucleus tem um plug -in para Jodatime que permitiria a persistência desejada.

Ou você pode usar essas coisas específicas do provedor ou pode usar @PostPersist, @PostUpdate, @PostLoad Métodos de retorno de chamada com um substituto @Transient campo.

http://www.java2.com/tutorial/java/0355__jpa/entityListenerpostload.htm Vou te dar uma ideia.

Por favor, sinta -se confortável para entrar em contato para qualquer esclarecimento adicional.

Uma solução é usar propriedades de não coluna e encapsulá-las com getters/setters.

Para dizer ao JPA para usar getters/setters em vez de acessar diretamente os campos privados, você deve anotar @id em public Long Getid () ao invés de Private Long Id. Ao fazer isso, lembre -se de usar @Transient para cada getter que não corresponde diretamente a uma coluna.

O exemplo a seguir criaria uma coluna de data nomeada meu encontro, enquanto o aplicativo teria métodos DateTime Getts () e Setts () disponíveis para ele. (Não tenho certeza da API DateTime, então perdoe pequenos erros :))

import org.joda.time.DateTime;

@Entity
public class Foo {

  private Long id;

  private DateTime ts;

  @Id
  public Long getId() { return id; }

  public void setId(Long id) { this.id = id; }



  // These should be accessed only by JPA, not by your application;
  // hence they are marked as protected

  protected Date getMyDate() { return ts == null ? null : ts.toDate(); }

  protected void setMyDate(Date myDate) {
    ts = myDate == null ? null : new DateTime(myDate);
  }



  // These are to be used by your application, but not by JPA;
  // hence the getter is transient (if it's not, JPA will
  // try to create a column for it)

  @Transient
  public DateTime getTs() { return ts; }

  public void setTs(DateTime ts) { this.ts = ts; }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top