版权提醒
本系列文章为原创内容。转载请注明文章来源。
前言
本文为搭建 SSSP 框架极简书店教程系列的其中一篇。本文主要内容:使用 IDEA 根据已有数据库创建对应 JPA 实体类。
本教程使用的数据库为 H2 数据库,使用其他数据库与此教程步骤相似。
创建项目所需数据库与表
这部分内容属于 SQL 的使用,本教程不再赘述。本教程中使用的数据表结构如下:
因为本教程项目基于作者的作业,这种表结构很多地方有明显的问题,例如没有管理员表、图书没有库存等等。
使用 IDEA 连接数据库
在 IDEA 右侧找到“数据库”栏,点击展开,然后选择连接 H2 数据库。
选择连接类型为:仅 URL ,然后填写用户和密码,填写 URL 后名称会自动改变。
如果你是首次连接 H2 数据库,那么需要配置驱动程序,点击驱动程序:h2,跳转到 H2 数据库驱动程序配置,去掉默认的 H2 驱动程序,因为版本太低。然后添加你在 Maven 中以及创建数据表时使用的 H2 jdbc 包。
回到数据源设置,点击测试连接,以测试数据库是否存在以及用户名密码是否正确。测试成功,点击应用,确认。
一般来说,到这里上图应该能显示数据表了,但与 H2 数据库连接还需要额外的操作。
点击“数据源属性”,重新打开“数据源与驱动程序”窗口,选择高级,勾选“使用 JDBC 元数据内省”
确认,然后在右侧点击“刷新”按钮,现在就可以在 IDEA 中看到数据库中的表的结构了。
如果你使用的数据库不执行使用 JDBC 元数据内省就可以显示数据表,就不要设置,因为 IDEA 官方文档说这样做可能使一些功能失效。
打开“Persistence(持久化)”窗口
默认情况下,这个窗口是隐藏的。你需要到视图–>工具窗口中找到它。
打开后如图:
生成持久化映射
在数据库名右键–>生成持久化映射–>通过数据库架构
注意事项:
1.要生成映射 XML 文件,需要指定文件路径与文件名。
2.不要直接在四个数据表前打钩,而是点击上方全选按钮,不然你会发现直接打钩有些列没有被选中。
3.建议勾选“显示默认关系”选项
3.更多选项的详细信息可以点击窗口左下角的问号查看官方文档。
完成
通过 IDEA 可以很方便地生成实体类,如图:
解决报错 Repeated column in mapping for entity
如果你的数据库存在列名相同的外键,那么在使用 JPA 时可能会报错,类似:org.hibernate.MappingException: Repeated column in mapping for entity: com.chiyu.entity.BorderitemEntity column: BID (should be mapped with insert=“false” update=“false”)
解决:在报错信息中找到存在问题的实体类,在其中找到类似 @JoinColumn(name = "OID", referencedColumnName = "OID", nullable = false)
的行,在后面提交一些限制,添加后如下: @JoinColumn(name = "OID", referencedColumnName = "OID", nullable = false,insertable = false,updatable = false)
。