JPA查询结果为无标识符

时间:2016-12-29 07:18:34

标签: java sql spring spring-data spring-data-jpa

我在春天使用JPA查询,我的子类扩展了仅包含 Id 的Baseclass,而我的子类具有下面给出的JPA查询所使用的所有变量:

基类:

@MappedSuperclass
@Table(name = "partcost")   
@NoArgsConstructor
@AllArgsConstructor
@Data
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Pg6p0012_01PartCostBaseQueryModel implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    String part_no;
}

子类:

@Entity
@Table(name = "partcost")   
@NoArgsConstructor
@AllArgsConstructor
@Data
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Pg6p0012_01PartCost1QueryModel extends Pg6p0012_01PartCostBaseQueryModel implements Serializable {
private static final long serialVersionUID = 1L;
private String stock_take_cost ;
private String cost_type ;
}

当我在JPA查询下面点击时:

@Repository
@Transactional
public interface Pg6p0012_01PartcostRepository extends JpaRepository<Pg6p0012_01PartCostBaseQueryModel, String>  {

@Query(value = "SELECT stock_take_cost,cost_type FROM partcost where part_no = :p_part_no", nativeQuery = true)
public List<Pg6p0012_01PartCost1QueryModel>getPartcost1Result(@Param("p_part_no") String p_part_no);
}

抛出错误:没有这样的列名 这是明确的,因为查询只返回一列,但模型有两列。

如何解决这个问题?请建议。

1 个答案:

答案 0 :(得分:1)

你使part_no成为瞬态。这意味着它不会持久存储在数据库中。因此,您没有收到此类列名称错误。从part_no上方的基类中删除@Transient。

并使用

注释您的基类
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

Hibernate支持三种基本的继承映射策略:

table per class hierarchy
table per subclass
table per concrete class