【问题标题】:Java - Attach extra column from @ManyToMany relashionship to entity modelJava - 将@ManyToMany关系中的额外列附加到实体模型
【发布时间】:2021-11-17 09:33:56
【问题描述】:

场景:

我在 MySQL 服务器上有 3 个表与 @ManyToMany 交互,一切正常,但我需要检索另一列而不是 @ManyToMany 注释上命名的列,例如:

Midias
|
|_ midiasId
|
|...
|@ManyToMany...
|_ veiculos


Veiculos
|
|_ veiculosId
|
|...
|
|@ManyToMany
|- midias
|...
|
|- bonus       <-  I like this variable here fetched from MidiaVeiculos table  and attached to Veiculos entity*

MidiaVeiculos
|
|- midiaCodigo
|- veiculoCodigo
|- bonus

我不知道我的代码是否正常,但我相信还有其他更有效的方法,例如:

veiculos.getBonus();

我的代码:

private List<MidiaResponseBonus> listarMidiasPorFiltros(BuscarMidiaRequest request) {

        List<MidiaModel> midias = this.mRepository.findAll(request.listarMidiasPorFiltros());

        List<MidiaResponseBonus> mb = midias.stream()
        .map(m -> {
            List<VeiculoResponseComBonus> veiculos = m.getVeiculos().stream().map(v -> new VeiculoResponseComBonus(
                v.getCodigo(),
                v.getNumeroOrdem(),
                v.getAnoFabricacao(),
                v.getEmpresa(),
                v.getRota(),
                v.getOperacional(),
                this.mvRepository.findByMidiaCodigoAndVeiculoCodigo(m.getCodigo(), v.getCodigo()).getBonus()
            )).collect(Collectors.toList());
            veiculos.forEach(v -> System.out.println(v.getBonus()));
            
            return new MidiaResponseBonus(
                m.getCodigo(),
                m.getCliente(),
                m.getCampanha(),
                m.getProduto(),
                m.getPedidoInsercao(),
                m.getPedidoProducao(),
                m.getInicioPeriodo(),
                m.getTerminoPeriodo(),
                m.getInicioFotos(),
                m.getTerminoFotos(),
                veiculos
            );
        }).collect(Collectors.toList());

        return mb;
    }

我需要检索 midiaVeiculos 表上的奖励列

我可以用@ManyToOne 和@OneToMany 解决问题吗? 谢谢!

【问题讨论】:

    标签: java spring spring-data many-to-many


    【解决方案1】:

    据我所知,@ManyToMany@OneToMany 等都是 Entity 之间的关系。 Entity A 可以通过特定属性与 Entity B 建立关系。

    如果您希望您的 Veiculos 了解 bonus,那么您需要与 MidiaVeiculos 建立 @OneToOne 关系:

    @Entity
    public class Veiculos{
    
     @OneToOne
     MidiVeiculous midi;
    
    }
    
    veiculos.getMidi().getBonus();
    

    https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/OneToOne.html


    另一个可行的选择是使用 SecondaryTable:

    @Entity
    @Table(name = "Veiculos")
    @SecondaryTable(name = "MidiaVeiculos", pkJoinColumns = @PrimaryKeyJoinColumn(name = "MidiaVeiculos_id"))
    class Veiculos{
    
        @Column(name = "bonus", table = "MidiaVeiculos")
        String bonus;
    
    }
    

    然而,两个表之间必须存在关系。就像某种 PK-FK。

    请参阅:将一个实体映射到多个表

    https://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#mapping-declaration-join

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 2016-05-10
      相关资源
      最近更新 更多