我有这个结构
车辆品牌
@Entity
@Getter
@Setter
public class VehicleBrand {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String otherInfo;
}
车辆模型
@Entity
@Getter
@Setter
public class VehicleModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private VehicleBrand brand;
private String name;
private String otherInfo;
}
我还想使用Dto对象,因为我想得到一个连接查询,它将从两个表返回数据,
ModelDto
@Getter
@Setter
public class ModelDto {
private Long id;
private String name;
private long brand_id;
}
@Getter
@Setter
public class VehicleBrandModelDto {
private Long id;
private String name;
List<ModelDto> model;
}
我想用jpa执行的查询是
选择vb.id,vm从vehicle_brandvb加入vehicle_modelvm onvb.id=vm.brand_id组vb.id,vb,vm,vm.brand_id;
现在,当我在数据库上执行此命令时,我有1122条记录。但只有85个不同的汽车品牌
我希望得到的结果是一个公共类车辆的列表。
private Long id;
private String name;
List<ModelDto> model;
}
其中有85个品牌,每个对象内部都有属于该品牌的模型列表。
Currently i have tried the following solutions
@Repository
public class VehicleBrandRepository {
@Autowired
private EntityManager entityManager;
public List getSuggestionList() {
Query nativeQuery = entityManager.createNativeQuery("select vb.name, vm as model from
vehicle_brand vb join vehicle_model vm on vb.id = vm.brand_id group by vb.name, vm");
return nativeQuery.getResultList();
}
// public List<VehicleBrandModelDto> getSuggestionList() {
// Query nativeQuery = entityManager.createQuery("select vb.id, vb.name, vm as model from
VehicleBrand vb join VehicleModel vm on vb.id = vm.brand.id group by vb.id, vb.name, vm");
// return nativeQuery.getResultList();
// }
}
使用createQuery的第二个解决方案给出了1122条记录的结果,我尝试使用流api对这些记录进行分组,但我遇到了类强制转换异常,第一个查询返回了错误
org.springframework.orm.jpa.JpaSystemException: No Dialect mapping for JDBC type: 2002; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: 2002
任何建议,我如何能实现这一点或这可能是不可能的?
数据库属性
spring.datasource.url=jdbc:postgresql://changed.compute-1.amazonaws.com:5432/changed
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=false
spring.datasource.username=changed
spring.datasource.password=changed
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.connection.pool_size=17
spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.PostgreSQLDialect
spring.datasource.driverClassName=org.postgresql.Driver
数据库版本postgress 12
不知道为什么你会得到这个没有方言映射的 JDBC 类型: 2002
错误。你能发布整个堆栈跟踪吗?这通常建议您使用在方言中没有注册匹配的Hibernate类型的SQL类型。类型代码 2002 引用 STRUCT
类型,但您发布的模型不包含任何外来类型。我猜 VehicleModel
还有其他一些属性,这些属性使用的类型未正确注册。您能展示车辆模型
的完整映射吗?
您可能还会喜欢Blaze-Persistence实体视图所提供的功能。
我创建了这个库,以允许在JPA模型和自定义接口或抽象类定义模型之间轻松映射,就像类固醇上的Spring Data Projections一样。这个想法是,你按照你喜欢的方式定义你的目标结构(域模型),并通过JPQL表达式将属性(getters)映射到实体模型。
对于Blaze持久性实体视图,用例的DTO模型可能如下所示:
@EntityView(VehicleBrand.class)
public interface VehicleBrandModelDto {
@IdMapping
Long getId();
String getName();
// Use this if you have an inverse one-to-many
@Mapping("models")
// Otherwise you can also do ad-hoc joins
// @Mapping("VehicleModel[brand.id = VIEW(id)]")
List<ModelDto> getModel();
@EntityView(VehicleModel.class)
interface ModelDto {
@IdMapping
Long getId();
String getName();
@Mapping("brand.id")
long getBrandId();
}
}
查询是将实体视图应用于查询的问题,最简单的方法是按 id 进行查询。
车辆模型a=entityViewManager.find(entityManager,VehicleBrandModelDto.class, id);
Spring数据集成让您可以像使用Spring数据投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-数据特征
List<VehicleBrandModelDto> findAll();
我在启动Web服务器时遇到上述错误。我用 enum 映射和 enity 类。类似... 是什么问题,我在配置中遗漏了什么吗?谢谢!!
问题内容: 我正在使用MySQL作为数据库的Spring JPA应用程序。我确保已加载所有spring-jpa库,hibernate和mysql-connector- java。 我正在运行mysql 5实例。这是我的application.properties文件的摘录: 执行集成测试时,spring可以正常启动,但无法创建hibernate的SessionFactory,但以下情况除外: 我认
虽然这个标题存在一些问题,但我的查询无法从这些线程中解决。 我在postgres中通过hibernate执行递归(使用with子句)查询,查询结果也包含搜索路径 ex:一行查询结果 Hibernate是否具有除字符串以外的的任何映射类型,类似于或。 下面是查询输出的示例 Hibernate正在抛出异常 原因:org.hibernate.MappingException:没有JDBC类型的方言映射:
问题内容: 尽管此标题存在一些问题,但我的查询并没有从那些线程中解决。 我正在通过postgres中的hibernate执行递归查询(与子句一起使用),查询结果也包含搜索路径 例如:查询结果的一行 hibernate状态是否具有String以外的任何映射类型,类似于或。 下面是查询输出的示例 Hibernate抛出异常 原因:org.hibernate.MappingException:没有JDB
我正在开发一个Spring JPA应用程序,使用MySQL作为数据库。我确保加载了所有spring-jpa库、hibernate和mysql-connector-java。 期待您的回答,谢谢! 顺便说一句,应用程序已经在使用spring Boot了。
为了处理运行Kotlin/SpringBoot应用程序时出现的以下错误(完整堆栈跟踪),我一直在咨询一些方法/帖子/堆栈溢出问题: 问题在于用Hibernate映射PostgreSQL的JSONB数据类型。 我广泛尝试和调试的两种方法如下: 实现自定义Hibernate映射并为JSONB创建自定义用户类型。参考文献:这里,这里,这里和这里 使用Hibernate类型。参考文献在这里,这里和这里 我