JPA错误:加入

时间:2017-05-20 15:37:17

标签: java spring hibernate jpa

在我的java spring mvc应用程序中,我有两个类:

@Entity
public class Transactions {

    @Id
    @GeneratedValue
    long id;

    @OneToOne
    Customer customer;
    @OneToOne
    Merchant merchant;

    double value;
}

,客户类是:

@Entity

public class Customer {

    @Id
    @GeneratedValue
    long id;

    String name;
    String ageClass;

    String language;
    String cardUserArea;

}

交易的存储库是:

@Repository
public interface TransactionRepository  extends JpaRepository<Transactions ,Long >{

    @Query("SELECT sum( value)  FROM Transactions  inner  join Customer on  Transactions.customer_id=Customer.id   where merchant_id= ?1 and age_class= ?2 ")
    public double getOverAllValue(String merchantID,String ageGroup);
}

但它抱怨道:

org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [SELECT sum( value)  FROM ee.seb.domain.Transactions  inner  join Customer on  Transactions.customer_id=Customer.id   where merchant_id= ?1 and age_class= ?2 ]

查询针对数据库成功运行

3 个答案:

答案 0 :(得分:2)

答案是使用nativeQuery

@Query(value = "SELECT sum( value)  FROM Transactions  inner  join Customer on  Transactions.customer_id=Customer.id   where merchant_id= ?1 and age_class= ?2 ", nativeQuery=true)
public double getOverAllValue(String merchantID,String ageGroup);

答案 1 :(得分:0)

以下代码是ex。实体和与其他实体的关系: -

@Entity
@Table(name = "F_AREA")
@NamedQuery(name = "FArea.findAll", query = "SELECT f FROM FArea f")
public class FArea implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@SequenceGenerator(name = "F_AREA_AREAID_GENERATOR", sequenceName = "SEQ_F_AREA")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "F_AREA_AREAID_GENERATOR")
@Column(name = "AREA_ID")
private long areaId;

@Column(name = "AREA_NAME_EN")
private String areaNameEn;

@Column(name = "AREA_STATUS")
private BigDecimal areaStatus;

@Column(name = "AREA_UPDATED_DATE")
private Timestamp areaUpdatedDate;

// bi-directional many-to-one association to FCity
@ManyToOne
@JoinColumn(name = "CITY_ID")
private FCity FCity;

// bi-directional many-to-one association to FCustomer
@OneToMany(mappedBy = "FArea")
private List<FCustomer> FCustomers;

.
.    
.
.
}

答案 2 :(得分:0)

请用此更新您的查询:

@Query("select sum(t.value) from Transactions t inner join t.customer c where c.id= ?1 and c.ageClass= ?2 ")
public Double getOverAllValue(long merchantID,String ageGroup);