我在春天使用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);
}
抛出错误:没有这样的列名 这是明确的,因为查询只返回一列,但模型有两列。
如何解决这个问题?请建议。
答案 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