【问题标题】:Hibernate illegal attempt to dereference collectionHibernate 非法尝试取消引用集合
【发布时间】:2016-05-06 10:05:38
【问题描述】:

大家好,我有一个 Spring Boot 应用程序正在尝试执行查询,但收到此错误

illegal attempt to dereference collection [dev0_."IdDev".vehid] with element property reference [marque] [SELECT DISTINCT d FROM com.ardia.MDValidation.entities.Dev d Left Join d.validationdvd v WHERE d.etatdev.id = 6 AND d.vehid.marque.Nommarque= ?] 

这是我的开发类

@Entity
@Table(name="\"DEV\"")
public class Dev {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@JsonView(View.databymaj.class)
@Column(name="\"IdDev\"")
private int id ;

@JsonView(View.databymaj.class)
@Column(name="\"NomDev\"")
private String nomdev;

@Column(name="\"NomDLL\"")
private String dll ;


@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="\"IdEtatDev\"")
private EtatDev etatdev ;

@JsonView(View.databymaj.class)
@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="\"IdEcu\"")
private Ecu ecu ; 


@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="\"VEH_BY_DEV\""
        ,joinColumns={@JoinColumn(name="\"IdDev\"")}, 
        inverseJoinColumns={@JoinColumn(name="\"GRPMOD\"")})


private Set<Vehid> vehid = new HashSet<>();




@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="\"IdMaj\"")
private Maj maj ; 


@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="\"FCT_BY_DEV\""
                    ,joinColumns={@JoinColumn(name="\"IdDev\"")}, 
inverseJoinColumns={@JoinColumn(name="\"IdFonction\"")})
private Set<Fonction> fonction = new HashSet<>();

@JsonView(View.databymaj.class)
@OneToMany(fetch=FetchType.EAGER,mappedBy="dev")
private Set<ValidationDVD> validationdvd =new HashSet<> () ;

这是我的 Vehid 课程

@Entity
@Table(name="\"Vehid\"")
public class Vehid {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="\"CODE_VEH\"")
private int idv ;
@JsonView(View.model.class)
@Column(name="\"NOMVEH\"")
private String model ;

@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="\"IdMarque\"")
private Marque marque ;

最后是 Marque 类:

@Entity
@Table(name="\"Marque\"")
public class Marque {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="\"CODMAR\"")
private  int id ;
@JsonView(View.marqonly.class)
@Column(name="\"NOMMAR\"")
private String Nommarque ;

我正在尝试执行此查询

  @Query(value="SELECT DISTINCT d FROM Dev d Left Join d.validationdvd v WHERE d.etatdev.id = 6 AND d.vehid.marque.Nommarque= ?")
  public List getbymarkalldata(String mark);

但它似乎不起作用,实际上它是如何不起作用的,因为我试图访问&lt;vehid&gt; 的列表,就像d.vehid 一样,但是我如何访问该属性任何帮助将不胜感激

【问题讨论】:

    标签: hibernate jpa spring-boot


    【解决方案1】:

    问题在这里:AND d.vehid.marque.Nommarque= ? 在您的 Dev 类中,vehid 是一个集合...您不能以这种方式在查询中引用它...您必须使用 JOIN 关键字... 就像您对 validationdvd 所做的那样:Left Join d.validationdvd v

    Left Join与否,由你决定...

    【讨论】:

      【解决方案2】:

      我找到了解决方案,就像他说的另一个 Join is missing here's syntax

      @Query(value="SELECT DISTINCT d FROM Dev d Left Join d.validationdvd v JOIN d.vehid vs  WHERE d.etatdev.id = 6 AND vs.marque.Nommarque= ?")
       public List getbymarkalldata(String mark);
      

      【讨论】:

      • 请接受我的回答然后......或者如果你愿意,你的回答;-) ...它可能会帮助其他人
      猜你喜欢
      • 1970-01-01
      • 2011-09-18
      • 2012-10-17
      • 2014-09-05
      • 2015-11-27
      • 2011-09-13
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多