Persistencia com JPA

Ola pessoal, estou utilizando implementação JPA como persistencia.
Problema: Por questão de performance não posso utilizar o persist do EntityManager, porque ao fazer isso preciso fazer consultas para fazer o relacionamento, e tenho que evitar essas consultas ao máximo, preciso que ele gere somente um insert, mais nada além disso, se fosse no antigo
JDBC era só criar o insert no braço e mandar pra la, mas com hibernate temos que montar os objetos na transação e persistir, só que ia vem o grande problema, ele não irá gera só um insert.

Saída encontrada, porém acho péssima… rsrs… EntityManager.createNativeQuery(“insert …”).executeUpdate(); = Funciona, porém não estarei utilizando objetos e sim linguagem nativa do banco… posso ter problema em uma troca de banco de dados…

Alguém poderia me sugerir uma outra forma, ou terei que ir pro native mesmo…?

[color=blue]estranho…

se vc for querer fazer apenas um insert… melhor vc montar um SQL manualmente…

Pelo que percebi em teu problema… é desnecessário usar frameworks de persistencia…

Sds…[/color]

Pois é, mas nessa caso é por forças maiores, questão de performance mesmo do banco, estou aproveitando o jpa para trabalhar com objetos, e para multibanco de dados, então não seria interessante usar jdbc puro, pois em uma possível alteração de banco o retrabalho seria muito grande, agora nesse caso não tenho como fugir pelo que to vendo, se eu não achar outra solução ainda tenho o native mesmo do jpa.

[color=blue]manda pra mim sua classe de entidade e a classe de persistencia…[/color]

Exemplo Básico que tenho.

Minha classe Entity…

@Entity
@Table(name = “LOGBATCH”)
public class Logbatch implements Serializable {

/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;

/** The logbatch code. */

@Id
@SequenceGenerator(name="SEQ", sequenceName="SEQ_LOGBATCH")
@GeneratedValue(strategy=GenerationType.AUTO, generator="SEQ")     
@Column(name = "LOGBATCH_CODE", nullable = false)
private Long logbatchCode;

/** The logbatch date. */
@Column(name = "LOGBATCH_DATE", nullable = false)
private Date logbatchDate;

/** The logbatch action. */
@Column(name = "LOGBATCH_ACTION", nullable = false)
private String logbatchAction;

/** The logbatch obs. */
@Column(name = "LOGBATCH_OBS")
private String logbatchObs;

/** The logbatch dbid. */
@Column(name = "LOGBATCH_DBID")
private String logbatchDbid;

/** The batch. */
@ManyToOne(fetch = FetchType.LAZY )
@JoinColumn(name="BATCH_CODE")
private Batch batch;

/** The usr. */
@ManyToOne(fetch = FetchType.LAZY )
@JoinColumn(name="USR_CODE")
private Usr usr;

}

Persistencia…

Método de persistencia…

public void insert(Object object){
	getManager().getTransaction().begin();
	getManager().persist(object);
	getManager().getTransaction().commit();
	getManager().close();
}

getManager() = uma instancia do EntityManager.

Nesse exemplo vc ve um LogBatch que tem um Batch e um Usr, eu ja tenho esses campos antes de inserir, no momento que estou montando o objeto LogBatch, eu recebo esses parametros de um sistema legado, eu estou provendo só serviços. Então eu teria que fazer duas consultas para trazer esses objetos Batch e Usr, isso que eu precisa evitar, sendo que ja to com essas chaves na mão.
Ok

[quote]JPA como persistencia[/quote], que bom… fiquei sabendo que a Java Persistence API, não é muito boa para interface gráfica, :? hahaha

[quote]Alguém poderia me sugerir uma outra forma[/quote] Simm!!! Vamos lá:
Você precisa de:
performance,
total controle de onde acessar e como acessar (justamente também por conta de performance e do banco ser muito grande),
A única coisa que precisa fazer no banco é um insert,
Independência do banco (BEM estranho, pois geralmente quando se tem uma base tão grande, na verdade o próprio banco se torna parte da solução, justamente para se conseguir performance, ou seja… trocar o banco é algo extremamente difícil, e quando se tem, é realmente um projeto essa alteração).

Meu caro… vai pro JDBC né! haha, no máximo para ter essa independência, cria um xml ou annotations (pode usar inclusive a da própria JPA), e cria você seu “hibernate”, pra fazer esse tal desse chave-valor (coluna, valor).

Quanto ao usar o nativeQuery, onde poderia estar a dependência em um insert com o tipo de banco de dados?? A única dependência que vejo é com a tabela (nome da tabela e dos campos), a não ser que você esteja fazendo innerQuery, ou chamando functions na cláusula, mas se esse for o caso, ai você está é piorando a performance.

:frowning: :wink:

Pois é, o nativeQuery resolve meu problema sim, a única coisa é que ao invés de usar a linguagem ejbql que ta em todo sistema, ai nos insert terie que usar o nativo… como jdbc. Mas é isso ai, nativeQuery mesmo… rsrs, valew pela ajuda.

[color=blue]Bom… automaticamente já insere em cascata… não precisa fazer consulta pra inserir…

Você deve apenas declarar o annotation CASCADE em Batch e Usr

sendo q estes já tem os respectivos valores…

Se for esse seu problema…

Sds…[/color]

Não é bem esse o problema na realidade eu ja tenho o código dos objetos, mas eles ja estão no banco ai nesse caso só quero inserir o LogBatch, o usr e batch ja estão gravados no banco, só quero referenciar para gravar apenas o LogBatch.

[color=blue]cara… então não tem jeito… kkkkkk…

vc terá q ter de alguma forma as chaves de Batch e Usr…

Sds… [/color]