【问题标题】:Why CriteriaQuery is putting dot in hibernate string?为什么 CriteriaQuery 将点放在休眠字符串中?
【发布时间】:2022-01-31 12:24:37
【问题描述】:

我的多选有问题。我将它用作具有多个连接的规范。我不知道为什么hibernate决定在查询中加一个点。错误显示在下面的查询中。这是我正在使用的构造函数

public HelperOutput(Long id,
                        String personName,
                        Long helperTypeId,
                        String helperTypeTitle,
                        String agencyTitle,
                        String regionalOfficeTitle,
                        String basketPartTitle,
                        YesNo allowedToOperate,
                        YesNo hasFlatTirePack,
                        Long fleetRescueId,
                        Long cityId,
                        String cityName,
                        Long skillLevel,
                        String helperRankTitle,
                        Long personId,
                        Long helperRate,
                        String personelId,
                        Long regionalOfficeId,
                        Long basketPartId,
                        String mobile,
                        String fleetName,
                        ExpertType expertType,
                        Long maxConcurrentWork,
                        Set<Long> dutyCityIds
                        ) {
        this.id = id;
        this.helperTypeId = helperTypeId;
        this.helperTypeTitle = helperTypeTitle;
        this.agencyTitle = agencyTitle;
        this.regionalOfficeId = regionalOfficeId;
        this.regionalOfficeTitle = regionalOfficeTitle;
        this.basketPartTitle = basketPartTitle;
        this.fleetRescueId = fleetRescueId;
        this.cityId = cityId;
        this.helperRankTitle = helperRankTitle;
        this.personId = personId;
        this.basketPartId = basketPartId;
        this.mobile = mobile;
        this.fleetName = fleetName;
        this.cityName = cityName;
        this.personName = personName;
        this.allowedToOperate = allowedToOperate;
        this.hasFlatTirePack = hasFlatTirePack;
        this.skillLevel = skillLevel;
        this.helperRate = helperRate;
        this.personelId = personelId;
        this.expertType = expertType;
        this.maxConcurrentWork = maxConcurrentWork;
        this.dutyCityIds = dutyCityIds;
    }

这是类似于构造函数的多选。

cq.multiselect(root.get(Helper_.ID),
                    personName,
                    helperHelperTypeJoin.get(HelperType_.ID),
                    helperHelperTypeJoin.get(HelperType_.TITLE),
                    helperAgencyJoin.get(Agency_.TITLE),
                    helperRegionalOfficeJoin.get(RegionalOffice_.TITLE)
                    , helperBasketPartJoin.get(Basket_.TITLE),
                    root.get(Helper_.ALLOWED_TO_OPERATE),
                    root.get(Helper_.HAS_FLAT_TIRE_PACK),
                    fleetRescueJoin.get(HelperFleet_.ID),
                    helperCityJoin.get(City_.ID) ,
                    helperCityJoin.get(City_.NAME),
                    root.get(Helper_.SKILL_LEVEL),
                    helperRankJoin.get(HelperRank_.NAME),
                    helperPersonJoin.get(Person_.ID),
                    root.get(Helper_.helperRate),
                    root.get(Helper_.personelId),
                    helperRegionalOfficeJoin.get(RegionalOffice_.ID),
                    helperBasketPartJoin.get(Basket_.ID),
                    helperPersonJoin.get(Person_.MOBILE),
                    HelperFleetJoin.get(Fleet_.NAME),
                    root.get(Helper_.EXPERT_TYPE),
                    root.get(Helper_.MAX_CONCURRENT_WORK),
                    root.get(Helper_.DUTY_CITIES)
            );

这是休眠查询,我不知道为什么它有一个点。

select
        * 
    from
        ( select
            helper0_.ID as col_0_0_,
            person3_.NAME as col_1_0_,
            helpertype7_.ID as col_2_0_,
            helpertype7_.TITLE as col_3_0_,
            agency2_.TITLE as col_4_0_,
            regionalof8_.TITLE as col_5_0_,
            basket6_.TITLE as col_6_0_,
            helper0_.ALLOWED_TO_OPERATE as col_7_0_,
            helper0_.HAS_FLAT_TIRE_PACK as col_8_0_,
            helperflee4_.ID as col_9_0_,
            city1_.ID as col_10_0_,
            city1_.NAME as col_11_0_,
            helper0_.SKILL_LEVEL as col_12_0_,
            helperrank9_.NAME as col_13_0_,
            person3_.ID as col_14_0_,
            helper0_.HELPER_RATE as col_15_0_,
            helper0_.PERSONELID as col_16_0_,
            regionalof8_.ID as col_17_0_,
            basket6_.ID as col_18_0_,
            person3_.MOBILE as col_19_0_,
            fleet5_.NAME as col_20_0_,
            helper0_.EXPERT_TYPE as col_21_0_,
            helper0_.MAX_CONCURRENT_WORK as col_22_0_,
            . as col_23_0_    <----------- this causes the problem
        from
            OPR.TBL_HELPER helper0_ 
        left outer join
            OPR.TBL_CITY city1_ 
                on helper0_.CITY_ID=city1_.ID 
        left outer join
            TBL_AGENCY agency2_ 
                on helper0_.AGENCY_ID=agency2_.ID 
        left outer join
            OPR.TBL_PERSONS person3_ 
                on helper0_.PERSON_ID=person3_.ID 
        left outer join
            OPR.TBL_HELPER_FLEET helperflee4_ 
                on helper0_.HELPER_FLEET_ID=helperflee4_.ID 
        left outer join
            OPR.NOEKHODROEMDAD fleet5_ 
                on helperflee4_.NOEKHODROEMDAD_ID=fleet5_.NOEKHODROEMDADID 
        left outer join
            OPR.TBL_BASKET basket6_ 
                on helper0_.BASKET_PART_ID=basket6_.ID 
        left outer join
            OPR.TBL_HELPER_TYPE helpertype7_ 
                on helper0_.HELPER_TYPE_ID=helpertype7_.ID 
        left outer join
            TBL_REGIONAL_OFFICE regionalof8_ 
                on helper0_.REGIONAL_OFFICE_ID=regionalof8_.ID 
        left outer join
            OPR.TBL_HELPER_RANK helperrank9_ 
                on helper0_.RANK_HELPER_ID=helperrank9_.ID 
        left outer join
            TBL_HELPER_DUTY_CITIES dutycities10_ 
                on helper0_.ID=dutycities10_.DUTY_CITY_ID 
        left outer join
            OPR.TBL_CITY city11_ 
                on dutycities10_.ESTABLISHMENT_CITY_ID=city11_.ID 
        inner join
            TBL_HELPER_DUTY_CITIES dutycities12_ 
                on helper0_.ID=dutycities12_.DUTY_CITY_ID 
        where
            1=1 
            and 1=1 
        order by
            helper0_.ALLOWED_TO_OPERATE asc,
            person3_.NAME asc ) 
    where
        rownum <= ?

最后,当我从我所做的谓词中返回一个规范时,我得到了这个错误。 错误:


2022-01-31 15:40:08.419 [http-nio-8082-exec-2] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ORA-00936: missing expression
 
2022-01-31 15:40:08.444 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> @AfterThrowing method: GenericRepository.findAll(..) 
2022-01-31 15:40:08.445 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> detailedMessage: ORA-00936: missing expression
 
2022-01-31 15:40:08.445 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> detailedCause: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
2022-01-31 15:40:08.445 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> @AfterThrowing method: HelperServiceImpl.findByCriteria(..) 
2022-01-31 15:40:08.445 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> detailedMessage: ORA-00936: missing expression
 
2022-01-31 15:40:08.445 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> detailedCause: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
2022-01-31 15:40:08.446 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> @AfterThrowing method: HelperController.show(..) 
2022-01-31 15:40:08.446 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> detailedMessage: ORA-00936: missing expression
 
2022-01-31 15:40:08.446 [http-nio-8082-exec-2] ERROR com.eki.opr.config.LoggingAspect - ----> detailedCause: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 

编辑 这些是实体:

@Entity(name = "HELPER")
@Table(name = "TBL_HELPER", schema = "OPR")
@EqualsAndHashCode(exclude = {"person", "agency", "helperType", "regionalOffice", "basket_part", "helperRank"})
@ToString(exclude = {"person", "agency", "helperType", "regionalOffice", "basket_part", "helperRank"})
@AllArgsConstructor
public class Helper implements Serializable {


    private Long id;
    @GenericGenerator(
            name = "assigned-sequence",
            strategy = "com.eki.opr.utils.StringSequenceIdentifier"
    )
    @GeneratedValue(
            generator = "assigned-sequence",
            strategy = GenerationType.AUTO)
    private String largeId;

    private Long skillLevel;
    private Long currentWorkCount;
    private Long maxConcurrentWork;
    private YesNo allowedToOperate;
    private YesNo hasGps;
    private YesNo isAutoDialer;
    private YesNo isPartSupply;
    private YesNo hasFlatTirePack;
    private String imei;
    private String address;
    private String personelId;
    private String reservedMobile;


    private Person person;
    private HelperFleet helperFleet;
    private HelperType helperType;
    private RegionalOffice regionalOffice;
    private Agency agency;
    private Basket basket_part;
    private Basket basket_tools;
    private YesNo hasPos;
    private String posSerial;
    private HelperRank helperRank;

    private Parameter contractType;

    private Set<ServiceType> serviceTypes = new HashSet<ServiceType>();

    private Long helperRate;


    private ExpertType expertType = ExpertType.HELPER;

    public Helper() {

    }

    private City city;

    @JoinColumn(name = "CITY_ID", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    public City getCity() {
        return city;
    }

    public void setCity(City city) {
        this.city = city;
    }


    
    private Set<HelperDutyCity> dutyCities = new HashSet<>();
    
    /* in this part mappedBy's value should be changed to helper because the 
     join must be on helper not dutyCityId*/

    @OneToMany(targetEntity = HelperDutyCity.class, mappedBy = "dutyCityId", fetch = FetchType.EAGER)
    public Set<HelperDutyCity> getDutyCities() {
        return dutyCities;
    }

    public void setDutyCities(Set<HelperDutyCity> dutyCities) {
        this.dutyCities = dutyCities;
    }

    public void setHelperRate(Long helperRate) {
        this.helperRate = helperRate;
    }
    @Column(name = "HELPER_RATE")
    public Long getHelperRate() {
        return helperRate;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_helper")
    @SequenceGenerator(name = "seq_helper", sequenceName = "SA.SEQ_EMDADGAR_ID", allocationSize = 1,initialValue = 63442)
    @Column(name = "ID")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }


    @Column(name = "ADDRESS")
    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }


    @Column(name = "SKILL_LEVEL")
    public Long getSkillLevel() {
        return skillLevel;
    }

    public void setSkillLevel(Long skillLevel) {
        this.skillLevel = skillLevel;
    }


    @Column(name = "MAX_CONCURRENT_WORK")
    public Long getMaxConcurrentWork() {
        return maxConcurrentWork;
    }

    public void setMaxConcurrentWork(Long maxConcurrentWork) {
        this.maxConcurrentWork = maxConcurrentWork;
    }


    @Column(name = "CURRENT_WORK_COUNT")
    public Long getCurrentWorkCount() {
        return currentWorkCount;
    }

    public void setCurrentWorkCount(Long currentWorkCount) {
        this.currentWorkCount = currentWorkCount;
    }


    @Column(name = "ALLOWED_TO_OPERATE")
    @Convert(converter = YesNoConverter.class)
    public YesNo getAllowedToOperate() {
        return allowedToOperate;
    }

    public void setAllowedToOperate(YesNo allowedToOperate) {
        this.allowedToOperate = allowedToOperate;
    }


    @Column(name = "HAS_GPS")
    @Convert(converter = YesNoConverter.class)
    public YesNo getHasGps() {
        return hasGps;
    }

    public void setHasGps(YesNo hasGps) {
        this.hasGps = hasGps;
    }


    @Column(name = "PART_SUPPLY")
    @Convert(converter = YesNoConverter.class)
    public YesNo getIsPartSupply() {
        return isPartSupply;
    }

    public void setIsPartSupply(YesNo isPartSupply) {
        this.isPartSupply = isPartSupply;
    }


    @Column(name = "PERSONELID")
    public String getPersonelId() {
        return personelId;
    }

    public void setPersonelId(String personelId) {
        this.personelId = personelId;
    }


    @Column(name = "HAS_FLAT_TIRE_PACK")
    @Convert(converter = YesNoConverter.class)
    public YesNo getHasFlatTirePack() {
        return hasFlatTirePack;
    }

    public void setHasFlatTirePack(YesNo hasFlatTirePack) {
        this.hasFlatTirePack = hasFlatTirePack;
    }


    @Column(name = "IMEI")
    public String getImei() {
        return imei;
    }

    public void setImei(String imei) {
        this.imei = imei;
    }
    @JoinColumn(name = "CREATED_BY", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    private PersonUnion createdBy;
    @Column(name = "CREATED_AT")
    private LocalDateTime createdAt;

    @Column(name = "IS_AUTO_DIALER")
    @Convert(converter = YesNoConverter.class)
    public YesNo getIsAutoDialer() {
        return isAutoDialer;
    }

    public void setIsAutoDialer(YesNo isAutoDialer) {
        this.isAutoDialer = isAutoDialer;
    }


    @Column(name = "RESERVED_MOBILE")
    public String getReservedMobile() {
        return reservedMobile;
    }

    @Column(name = "HAS_POS")
    @Convert(converter = YesNoConverter.class)
    public YesNo getHasPos() { return hasPos; }
    public void setHasPos(YesNo hasPos) {
        this.hasPos = hasPos;
    }

    @Column(name = "POS_SERIAL")
    public String getPosSerial() { return posSerial; }
    public void setPosSerial(String posSerial) {
        this.posSerial = posSerial;
    }

    public void setReservedMobile(String reservedMobile) {
        this.reservedMobile = reservedMobile;
    }
    @JoinColumn(name = "MODIFIED_BY", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    private PersonUnion modifiedBy;
    @Column(name = "MODIFIED_AT")
    private LocalDateTime modifiedAt;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "PERSON_ID", referencedColumnName = "ID")
    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    @JoinColumn(name = "HELPER_TYPE_ID", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    public HelperType getHelperType() {
        return helperType;
    }

    public void setHelperType(HelperType helperType) {
        this.helperType = helperType;
    }


    @JoinColumn(name = "REGIONAL_OFFICE_ID", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    public RegionalOffice getRegionalOffice() {
        return regionalOffice;
    }

    public void setRegionalOffice(RegionalOffice regionalOffice) {
        this.regionalOffice = regionalOffice;
    }

    @JoinColumn(name = "AGENCY_ID", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    public Agency getAgency() {
        return agency;
    }

    public void setAgency(Agency agency) {
        this.agency = agency;
    }

    @JoinColumn(name = "BASKET_PART_ID", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    public Basket getBasket_part() {
        return basket_part;
    }

    public void setBasket_part(Basket basket_part) {
        this.basket_part = basket_part;
    }

    @JoinColumn(name = "BASKET_TOOLS_ID", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    public Basket getBasket_tools() {
        return basket_tools;
    }

    public void setBasket_tools(Basket basket_tools) {
        this.basket_tools = basket_tools;
    }

    @ManyToOne
    @JoinColumn(name = "HELPER_FLEET_ID", referencedColumnName = "ID")
    public HelperFleet getHelperFleet() {
        return helperFleet;
    }

    public void setHelperFleet(HelperFleet helperFleet) {
        this.helperFleet = helperFleet;
    }

    @JoinColumn(name = "RANK_HELPER_ID", referencedColumnName = "ID")
    @ManyToOne(fetch = FetchType.LAZY)
    public HelperRank getHelperRank() {
        return helperRank;
    }

    public void setHelperRank(HelperRank helperRank) {
        this.helperRank = helperRank;
    }


    @Column(name = "LARGE_ID")
    public String getLargeId(){return this.largeId;}

    public void setLargeId(String largeId){this.largeId = largeId;}

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "TBL_HELPER_SERVICE_TYPE", uniqueConstraints = {@UniqueConstraint(columnNames = {"HELPER_ID", "SERVICE_TYPE_ID"})},
            joinColumns = @JoinColumn(name = "HELPER_ID", referencedColumnName = "ID"),
            inverseJoinColumns = @JoinColumn(name = "SERVICE_TYPE_ID", referencedColumnName = "ID"))
    public Set<ServiceType> getServiceTypes() {
        return serviceTypes;
    }

    public void setServiceTypes(Set<ServiceType> serviceTypes) {
        this.serviceTypes = serviceTypes;
    }

    @JoinColumn(name = "CONTRACT_TYPE")
    @ManyToOne
    public Parameter getContractType() {
        return contractType;
    }

    public void setContractType(Parameter contractType){
        this.contractType = contractType;
    }

    @Convert(converter = ExpertTypeConverter.class)
    @Column(name = "EXPERT_TYPE")
    public ExpertType getExpertType() {
        return expertType;
    }

    public void setExpertType(ExpertType expertType) {
        this.expertType = expertType;
    }

    public void fromDto(HelperInput input) {
        this.id = input.getId();
        this.address = input.getAddress();
        this.allowedToOperate = input.getAllowedToOperate();
        this.currentWorkCount = input.getCurrentWorkCount();
        this.hasGps = input.getHasGps();
        this.hasFlatTirePack = input.getHasFlatTirePack();
        this.isAutoDialer = input.getIsAutoDialer();
        this.personelId = input.getPersonelId();
        this.isPartSupply = input.getIsPartSupply();
        this.maxConcurrentWork = input.getMaxConcurrentWork();
        this.hasPos = input.getHasPos();
        this.posSerial = input.getPosSerial();
        this.skillLevel = input.getSkillLevel();
        this.reservedMobile = input.getReservedMobile();

        if (input.getId() == null) { //first time
            this.largeId = StringSequenceIdentifier.generateLargeId();
            this.createdBy = input.getCreatedByEntity();
            this.createdAt = LocalDateTime.now();
            this.modifiedBy = input.getCreatedByEntity();
            this.modifiedAt = createdAt;
        } else {
            this.modifiedBy = input.getModifiedByEntity();
            this.modifiedAt = LocalDateTime.now();
        }

        this.helperRate = input.getHelperRate();

    }

}

@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
@AllArgsConstructor
@JsonDeserialize
@Table(name = "TBL_HELPER_DUTY_CITIES")
@IdClass(HelperDutyCityKey.class)
public class HelperDutyCity implements Serializable {

    @Id
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "HELPER_ID")
    private Helper helper;

    @Id
    @OneToOne
    @JoinColumn(name = "ESTABLISHMENT_CITY_ID", referencedColumnName = "ID")
    @Fetch(FetchMode.JOIN)
    private City establishmentCityId;

    @ManyToOne
    @JoinColumn(name = "DUTY_CITY_ID", referencedColumnName = "ID")
    @Fetch(FetchMode.JOIN)
    private City dutyCityId;


    public HelperDutyCity(Helper helper, City establishmentCityId) {
        this.helper = helper;
        this.establishmentCityId = establishmentCityId;
    }

}


@Data
@ToString(exclude = {"regions","regionalOffice", "province","productCities"})
@EqualsAndHashCode(exclude = {"regions","regionalOffice", "province","productCities"})
@JsonInclude(JsonInclude.Include.NON_NULL)
@Entity
@Table(name = "TBL_CITY", schema = "OPR")
public class City implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    @GenericGenerator(
            name = "seqCity",
            strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
            parameters = {
                    @org.hibernate.annotations.Parameter(name = "sequence_name", value = "SEQ_CITY"),
                    @org.hibernate.annotations.Parameter(name = "initial_value", value = "100219"),
                    @org.hibernate.annotations.Parameter(name = "increment_size", value = "1")
            }
    )
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqCity")
    @Id
    @Column(name = "ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @ManyToOne(fetch =  FetchType.LAZY)
    @JoinColumn(name = "PROVINCE_ID", nullable = false)
    private Province province;

    @GenericGenerator(
            name = "assigned-sequence",
            strategy = "com.eki.opr.utils.StringSequenceIdentifier"
    )
    @GeneratedValue(
            generator = "assigned-sequence",
            strategy = GenerationType.SEQUENCE)
    @Column(name = "LARGE_ID")
    private String largeId;

    @Column(name = "OPR_SHAHR_ID")
    private Double oprCityId;

    @Column(name = "LATITUDE")
    private Double latitude;

    @Column(name = "LONGITUDE")
    private Double longitude;

    @Column(name = "METROPOLIS_FACTOR")
    private Double metropolisFactor;

    @Convert(converter = YesNoConverter.class)
    @Column(name = "IS_AUTOMATED_DISPATCH")
    private YesNo isAutomatedDispatch;

    @Convert(converter = GeneralStatusConverter.class)
    @Column(name = "STATUS")
    private GeneralStatus status;

    @Column(name = "PARSIMAP_CITY_CODE")
    private String parsiMapCityCode;

    @Column(name = "AMAR_CITY_CODE")
    private String parsiMapCityAmarCode;

    @JoinColumn(name = "REGIONAL_OFFICE_ID")
    @ManyToOne(fetch =  FetchType.LAZY)
    private RegionalOffice regionalOffice;

    @ManyToMany(
            fetch = FetchType.LAZY, mappedBy = "cities")
    Set<Region> regions = new HashSet<>();

/*    @OneToMany(mappedBy = "city")
    private Set<Address> addresses;*/

    public City() {
    }

    public City(Long id) {
        this.id = id;
        //   this.addresses = addresses;
    }

    public City(CityDto dto) {
        fromDto(dto);
    }

    public void fromDto(CityDto cityDto) {
        this.name = cityDto.getName();
        this.metropolisFactor = cityDto.getMetropolisFactor();
    }

    public CityDto toDto() {
        CityDto dto = new CityDto();
        dto.setId(id);
        dto.setName(name);
        dto.setMetropolisFactor(metropolisFactor);
        dto.setProvinceDto(province.toDto());
        dto.setRegionalOfficeOutput(regionalOffice.toDto());
        return dto;
    }

    public CityLite toDtoLite() {
        CityLite dto = new CityLite();
        dto.setId(id);
        dto.setName(name);
        dto.setMetropolisFactor(metropolisFactor);
        dto.setProvinceId(province != null ? province.getId() : null);
        dto.setProvinceName(province != null ? province.getName() : "");
        dto.setRegionalOfficeId(regionalOffice != null ? regionalOffice.getId() : null);
        dto.setRegionalOfficeTitle(regionalOffice != null ? regionalOffice.getTitle() : "");
        dto.setParsiMapCityCode(parsiMapCityCode);
        dto.setParsiMapAmarCityCode(parsiMapCityAmarCode);
        dto.setLat(latitude != null ? latitude :0);
        dto.setLng(longitude != null ? longitude :0);
        return dto;
    }
}

【问题讨论】:

  • 我会说以下行导致了问题:. as col_23_0_ 。这表示读取第 24 列但名称似乎是一个点。 Helper0_.MAX_CONCURRENT_WORK as col_22_0_ 之后的逗号似乎是正确的,因为它后面还有一个选择项。
  • 你知道应该有一个列表,我的意思是Helper_.DUTY_CITIES。我认为这会导致问题,因为 Oracle 中没有类型列表,因此无法选择。
  • 您最初是如何在 Oracle 中映射该列表/集的?看起来您在这里有一个内部连接,这意味着您复制每个职责城市 ID(笛卡尔积)的其余数据,这可能会干扰“分页”(至少我会这样解释这个 where rownum &lt;= ? 部分查询)。也许考虑使用单独的查询加载职责城市。
  • 我用@OneToMany 注释映射它。我不使用它自动构建的任何查询,我知道问题出在哪里。我使用了不正确的mappedBy 属性。
  • 那么问题现在解决了吗?也许添加一个答案,详细说明导致此问题的原因(如果可能,包括您的模型)供其他人阅读,如果他们有同样的问题。

标签: java spring hibernate spring-data-jpa


【解决方案1】:

我在Helper 实体的评论中回答了这个问题。答案是你不应该在@OneToMany 注释中的mappedBy 属性中犯错误。所以我将dutyCityId 更改为helper 现在它正在工作。 在加入另一个条件 helper.ID = helperDutyCity.dutyCityId 之前它是错误的,现在它加入了这个条件 helper.ID = helperDutyCity.helperId 这是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2011-11-25
    相关资源
    最近更新 更多