jpa springboot 实体和数据库表映射问题

jacshan 2019-12-07 04:00:48
@Data
@EqualsAndHashCode(callSuper = true)
@Entity
@TypeDef(name = "json", typeClass = JsonStringType.class)
@Table(name = ModelConstants.DEVICE_COLUMN_FAMILY_NAME)
public final class DeviceEntity {

@Id
@Column(name = "DEV_ID")
protected String id;

@Column(name = "TENANT_ID")
private String tenantId;
...
}
Repository写法类似下面:
@Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " +
"AND d.id > :idOffset ORDER BY d.id")
List<DeviceEntity> findByTenantId(@Param("tenantId") String tenantId);

查询会报错

jdbc.spi.SqlExceptionHelper - Unknown column 'deviceenti0_.id' in 'field list'


之前没了解过jpa,懂的帮忙看一下,实体的属性名称和表的属性名称要按一致吗,我理解@Column属性不就是为了定义不同的名称吗, 难道命名还要遵循规则?

...全文
494 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cellion 2020-03-28
  • 打赏
  • 举报
回复
我也遇到这个问题,好像在springboot里有问题,数据库必须有id和name,没有它就给你添一个,无论你用id生成哪种策略都不行
头脑清醒。 2021-12-16
  • 举报
回复
@cellion 应该是需要设置一下 database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
头脑清醒。 2021-12-16
  • 举报
回复
@cellion 如果使用数据表实体作为映射对象的话, nativeQuery = true,values 中查询的返回的结果集字段名要和对象属性的@Column一致
头脑清醒。 2021-12-16
  • 举报
回复
@cellion 或者定义一个Vo 来对结果集字段进行映射 注意 getField,但是如果使用 数据表实体 Entity 来映射结果集的某一些字段,这样是行不通的,只能通过 Vo 或者返回一个 object[]
学不会的java 2019-12-09
  • 打赏
  • 举报
回复
对应得列名有问题
BigBug博客 2019-12-09
  • 打赏
  • 举报
回复
很少用jpa,我每次用jpa的时候,这些实体类代码都是IDEA给我自动生成的,没太关注这些对应关系,不过你可以学习一下jpa的注解就可以很熟练用起这个来了,随便百度一下jpa注解用法就可以了
jacshan 2019-12-08
  • 打赏
  • 举报
回复
引用 1 楼 Mister_X 的回复:
mybatis不香???
香,这不是找了个开源框架玩吗,用的是jpa+hibernate
Mister_X 2019-12-07
  • 打赏
  • 举报
回复
mybatis不香???

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧