【问题标题】:Caused by: java.sql.SQLSyntaxErrorException: [SQL0205] Column MITMAS_MMCONO not in table OOLINE in schema引起:java.sql.SQLSyntaxErrorException:[SQL0205] 列 MITMAS_MMCONO 不在架构中的表 OOLINE 中
【发布时间】:2015-06-10 18:15:16
【问题描述】:

我有 3 个实体类

Ooline:

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

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
        @JoinColumn(name="mitmas_mmcono" , referencedColumnName="mmcono"),
        @JoinColumn(name="mitmas_mmitno" , referencedColumnName="mmitno")
    })
    private Mitmas mitmas ;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
        @JoinColumn(name="mitfac_m9cono", referencedColumnName="m9cono"),
        @JoinColumn(name="mitfac_m9itno", referencedColumnName="m9itno"),
        @JoinColumn(name="mitfac_m9faci", referencedColumnName="m9faci")
    })
    private Mitfac mitfac ;

    @Id
    private String obitno;
    @Id
    private BigDecimal obcono;
    @Id
    private String obfaci;

    private BigDecimal obabno;

    //getter and setters

}

Mitfac:

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

    @OneToMany(mappedBy="mitfac",fetch=FetchType.LAZY)
    private List<Ooline> oolineItem; 

    @Id
    private String m9itno;
    @Id
    private String m9faci;
    @Id
    private BigDecimal m9cono;

    private String m9acrf;

    private BigDecimal m9appr;

    //getter and setter

}

Mitmas:

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

    @OneToMany(mappedBy="mitmas",fetch=FetchType.LAZY)
    private List<Ooline> ooline; 

    @Id
    private String mmitno;
    @Id
    private BigDecimal mmcono;

    private BigDecimal mmaad0;

    private BigDecimal mmaad1;

    private String mmaccg;

    //getter and setter methods
}

以下是我的存储库文件:

public interface OolineRepository extends JpaRepository<Ooline, String> 
{
    public static final String ORDER_LINE_QUERY = 
            "select x.obcono,x.oborno,x.obponr, x.obposx, x.obfaci, x.obitno, x.obitds, x.oborqt, "
            + "x.oborqa, x.obwhlo, x.obadid, x.obpopn, x.obrout, x.obmodl, x.oborst,"
            + " x.obnepr, x.obdwdz, x.obcodz, x.obpldt, x.obplhm,"
            + " x.obprrf, x.obspun, x.obrgdt, x.obrgtm, x.obwhsl from Ooline x "
            + "left join x.mitmas y  left join x.mitfac z "
            + "where x.obcono = :cono and x.oborno = :orno";

    @Query(ORDER_LINE_QUERY)
    public List<Ooline> getOolineLines(@Param("cono") BigDecimal cono, @Param("orno") String orno);
}

我应该在 SQL 中执行以下查询

"select x.oborno,x.obponr, x.obposx, x.obfaci, x.obitno, x.obitds, x.oborqt, x.oborqa,
x.obwhlo, x.obadid, x.obpopn, x.obrout, x.obmodl,x.oborst, x.obnepr, x.obdwdz, x.obcodz,
x.obpldt, x.obplhm,x.obprrf, x.obspun, x.obrgdt, x.obrgtm, x.obwhsl from Ooline x join
schema.mitmas on mmcono = obcono and mmitno = obitno left join  schema.mitfac on
m9cono = obcono and m9faci = obfaci and m9itno = obitno where obcono =1 and oborno = 'asasa'";

任何人都可以验证是否正确构造和映射了实体。 但是查询没有按照我期望的方式构建。出现错误“列 MITMAS_MMCONO 不在表 OOLINE 中”。任何人都可以在这方面帮助我

【问题讨论】:

    标签: spring hibernate jpa left-join spring-data


    【解决方案1】:

    映射的实体构造正确,但查询未预先定义。您希望从子实体 Ooline 到主实体 Mitmas 进行左连接,它试图通过将主键字段从 Ooline 连接到来自 Mitmas 的主键字段(参见生成的 sql),这是不正确的。既然您实际上并没有使用主实体中的任何东西,为什么还要左连接?

    【讨论】:

    • 我想创建如下连接 "m3fdbdem.mitmas on mmcono = obcono and mmitno = obitno" 但生成一个就像 "left outer join Mitmas mitmas1_ on ooline0_.mitmas_mmcono=mitmas1_.mmcono和 ooline0_.mitmas_mmitno=mitmas1_.mmitno" 这是不正确的
    • 另外查询未满,一旦工作正常,我将从 mitmas 实体添加更多列
    【解决方案2】:

    我已经改变如下

    @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumns({
            @JoinColumn(updatable=false,insertable=false,name="obcono",referencedColumnName="mmcono"),
            @JoinColumn(updatable=false,insertable=false,name="obitno",referencedColumnName="mmitno")
        })
        private Mitmas mitmas ;
    
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumns({
            @JoinColumn(updatable=false,insertable=false,name="obcono",referencedColumnName="m9cono"),
            @JoinColumn(updatable=false,insertable=false,name="obitno",referencedColumnName="m9itno"),
            @JoinColumn(updatable=false,insertable=false,name="obfaci",referencedColumnName="m9faci")
        })
        private Mitfac mitfac ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 2020-01-22
      • 1970-01-01
      • 2015-08-24
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多