【问题标题】:Save data with entity manager in multiple schemas使用实体管理器在多个模式中保存数据
【发布时间】:2020-02-04 16:04:17
【问题描述】:

我正在一个项目中工作,我必须将相同的信息保存在不同的架构中

例如我有这个实体

@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);
    }

}

目前它可以工作并保存在我的公共架构中,但是我不知道如何保存在同一数据库中的不同架构中。

我在考虑重复实体,但当我尝试时,出现错误

【问题讨论】:

    标签: java hibernate entitymanager


    【解决方案1】:

    您将需要多个持久性上下文,每个架构一个。然后您可以使用这些上下文来保存/合并实体。

    @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);
        }
    }
    

    【讨论】:

    • 谢谢@Rohit,我正在查看我的persistence.xml,我刚刚定义了一个持久性单元。但是,我将添加另一个持久性单元,在哪里可以定义用于此持久性单元的架构
    • 我认为您将需要另一个数据源。
    • 目前我已经将hibernate.default_schema属性添加到新的持久化单元中,数据源的作用是什么?
    • 你能分享你的persistence.xml吗?
    猜你喜欢
    • 2021-08-02
    • 2020-07-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2011-04-13
    • 2015-05-05
    • 2014-11-25
    • 2018-01-05
    相关资源
    最近更新 更多