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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 用集合字符串构造Dto投影_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Hibernate 用集合字符串构造Dto投影

Hibernate 用集合字符串构造Dto投影,hibernate,jpa,spring-data-jpa,Hibernate,Jpa,Spring Data Jpa,我使用SpringBoot2JPA和hibernate 我试着用我的一个实体做一个dto投影 @Entity public class Factories extends BaseEntity { @Id @SequenceGenerator(name = "factories_id_seq", sequenceName = "factories_id_seq", allocationSize = 1) @GeneratedValue(strategy = Genera

我使用SpringBoot2JPA和hibernate

我试着用我的一个实体做一个dto投影

@Entity
public class Factories extends BaseEntity {

    @Id
    @SequenceGenerator(name = "factories_id_seq", sequenceName = "factories_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "factories_id_seq")
    private Integer id;

    private String name;

    private String address;

    @OneToOne
    private Cities cities;

    @ManyToMany
    private Set<GranulateProducts> granulateProducts = new HashSet<>();

    @JsonIgnore
    @OneToMany(mappedBy = "factory", cascade = CascadeType.ALL, orphanRemoval = true)
    private final List<Machines> machines = new ArrayList<>();

    @ElementCollection
    private Collection<String> emails = new ArrayList<String>();

    private boolean generatedEmail;

    private boolean generation;

    private String phone;

    private String fax;

    private String director;

    ...
}
@实体
公共类工厂扩展BaseEntity{
@身份证
@SequenceGenerator(name=“factories\u id\u seq”,sequenceName=“factories\u id\u seq”,allocationSize=1)
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“Factorys\u id\u seq”)
私有整数id;
私有字符串名称;
私有字符串地址;
@奥内托内
私人城市;
@许多
private Set granulateProducts=new HashSet();
@杰索尼奥雷
@OneToMany(mappedBy=“factory”,cascade=CascadeType.ALL,orphan=true)
私有最终列表机器=新的ArrayList();
@元素集合
私人收集电子邮件=新建ArrayList();
私人布尔生成邮件;
私有布尔生成;
私人电话;
私人字符串传真;
私有字符串控制器;
...
}
我的dto

public class FactoriesEditDto {

    private Integer id;

    private String name;

    private String address;

    private Integer citiesId;
    private String citiesName;

    private List<Integer> machinesId = new ArrayList<>();

    private List<String> emails = new ArrayList<>();

    private boolean generatedEmail;

    private boolean generation;

    private String phone;

    private String fax;

    private String director;

    public FactoriesEditDto(Integer id, String name, String address, Cities cities, List<Machines> machines, Collection<String> emails, boolean generatedEmail, boolean generation, String phone, String fax, String director) {
        this.id = id;
        this.name = name;
        this.address = address;

        if (cities != null) {
            this.citiesId = cities.getId();
            this.citiesName = cities.getName();
        }

        machines.stream().forEach(machine -> machinesId.add(machine.getId()));

        this.emails = (List<String>) emails;
        this.generatedEmail = generatedEmail;
        this.generation = generation;
        this.phone = phone;
        this.fax = fax;
        this.director = director;
    }

    ...
}   


public interface FactoriesRepository extends JpaRepository<Factories, Integer> {

public FactoriesEditDto findDtoedById(Integer id);
公共类factoriesdetto{
私有整数id;
私有字符串名称;
私有字符串地址;
私有整数citiesId;
私有字符串citiesName;
private List machinesId=new ArrayList();
私有列表电子邮件=新建ArrayList();
私人布尔生成邮件;
私有布尔生成;
私人电话;
私人字符串传真;
私有字符串控制器;
public FactoriesEditTo(整数id、字符串名称、字符串地址、城市、列表机、收集电子邮件、布尔生成邮件、布尔生成、字符串电话、字符串传真、字符串控制器){
this.id=id;
this.name=名称;
this.address=地址;
如果(城市!=null){
this.citiesId=cities.getId();
this.citiesName=cities.getName();
}
machines.stream().forEach(machine->machinesId.add(machine.getId());
this.emails=(列表)电子邮件;
this.generatedEmail=generatedEmail;
这个世代=世代;
this.phone=电话;
this.fax=传真;
this.director=director;
}
...
}   
公共接口factoresepository扩展了JpaRepository{
public factoriesdetto findDtoedById(整数id);
}

当我运行并尝试进行转换时,我得到

org.hibernate.hql.internal.ast.QuerySyntaxException:无法找到 类[com.lcm.dto.factoriesdito]上的适当构造函数。 预期参数为:int、java.lang.String、java.lang.String、, com.lcm.model.Cities、com.lcm.model.Machines、java.lang.String、, 布尔值,布尔值,java.lang.String,java.lang.String, java.lang.String[

选择new com.lcm.dto.factoriesdetto(generatedAlias0.id, generatedAlias0.name,generatedAlias0.address, 城市、机器、电子邮件、, generatedAlias0.generatedEmail,generatedAlias0.generation, generatedAlias0.电话,generatedAlias0.传真, 从com.lcm.model.Factories生成的ADIAS0.director)作为 generatedAlias0左连接generatedAlias0.machines作为机器 left join GenerateDias0.email作为电子邮件,其中 generatedAlias0.id=:param0

]


看起来,电子邮件就像一个字符串,而不是字符串的集合…

正如JPA规范告诉您的,您不能选择多值字段。一个集合可以吗?所以我们需要忘记dto投影。。。对所有人来说。。。