Сохранить данные с помощью диспетчера сущностей в нескольких схемах - PullRequest
0 голосов
/ 04 февраля 2020

Я работаю в проекте, где мне нужно сохранить одну и ту же информацию в разных схемах

В качестве примера у меня есть эта сущность

@Entity
@NamedQuery(name = "Cliente.findAll", query = "SELECT c FROM Cliente c")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@SequenceGenerator(name = "CLIENTE_CLICODIGO_GENERATOR", sequenceName = "CLIENTE_CLI_CODIGO_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CLIENTE_CLICODIGO_GENERATOR")
@Column(name = "cli_codigo")
private Integer cliCodigo;

@Column(name = "cli_activo", columnDefinition = "bool default true")
private Boolean cliActivo = true;

И способ сохранить данные :

@PersistenceContext
EntityManager entityManager;

public void guardarCliente(Cliente clienteSeleccionado) throws Exception {
    if (clienteSeleccionado.getCliCodigo() == null) {
        entityManager.persist(clienteSeleccionado);
    } else {
        entityManager.merge(clienteSeleccionado);
    }

}

На данный момент это работает и сохраняет в моей схеме publi c, однако я не знаю, как сохранить в другой схеме в той же базе данных.

Я думал в двух экземплярах, но когда я пытаюсь это сделать, появляются ошибки

1 Ответ

0 голосов
/ 04 февраля 2020

Вам понадобится несколько контекстов персистентности, по одному на схему. Затем вы можете использовать этот контекст для сохранения / объединения объектов.

@PersistenceContext(unitName="schema_1")
EntityManager entityManagerS1;

@PersistenceContext(unitName="schema_2")
EntityManager entityManagerS2;

public void guardarCliente(Cliente clienteSeleccionado) throws Exception {
    if (clienteSeleccionado.getCliCodigo() == null) {
        entityManagerS1.persist(clienteSeleccionado);
        entityManagerS2.persist(clienteSeleccionado);
    } else {
        entityManagerS1.merge(clienteSeleccionado);
        entityManagerS1.merge(clienteSeleccionado);
    }
}
...