Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 休眠取消引用集合的非法尝试_Hibernate_Jpa_Spring Boot - Fatal编程技术网

Hibernate 休眠取消引用集合的非法尝试

Hibernate 休眠取消引用集合的非法尝试,hibernate,jpa,spring-boot,Hibernate,Jpa,Spring Boot,大家好,我有一个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.

大家好,我有一个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<> () ;
最后是品牌级:

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

但它似乎不起作用,事实上,它说明了它是如何不起作用的,因为我试图访问一个
列表,像这样
d.vehid
,但是我如何访问该属性呢?任何帮助都将受到感谢问题在于:
和d.vehid.marque.nommaque=?
在Dev类中,vehid是一个集合。。。您不能以这种方式在查询中引用它。。。您必须使用
JOIN
关键字。。。 就像您对validationdvd所做的那样:
Left Join d.validationdvd v


是否加入左键
由您决定

我找到了解决方案,就像他说的那样,缺少另一个连接,语法如下

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

请接受我的回答,然后。。。或者你的答案,如果你愿意;-)。。。它可以帮助别人
@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);