java - 如何为 Java JDBC EntityManagerFactory 类中的实体设置 ID?

标签 java mysql jdbc entitymanager

我用 MySQL Workbench 创建了我的 MySQL 数据库,然后我添加了 MySQL JDBC Driver 和 EclipseLink 库,然后从数据库创建了实体类;全部使用 NetBeans。由于我的观点和所有合并,我需要放弃使用简单的“id”列名;以一种方式重命名它们更容易:“id”->“TableNameId”。在创建实体类的过程中,有一条消息说我必须手动为所有实体设置 ID。怎么做?每个表都有 TableName.java 和 TableNamePK.java 文件。

TableNamePK.java 文件中有这样几行:

    @EmbeddedId
    protected AdministratorsPK administratorsPK;

TableNamePK.java 文件中有这样一行:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "UserId", nullable = false)
private Integer userId;

我认为应该是这样,但我担心消息 - 我应该做些什么才能让它发挥作用?

它抛出错误:

Exception Description: Entity class [class kwestionariusz.manager.View2] has no primary key specified. It should define either an @Id, @EmbeddedId or an @IdClass. If you have defined PK using any of these annotations then make sure that you do not have mixed access-type (both fields and properties annotated) in your entity class hierarchy.

我假设这是第二种情况……但是如何正确处理呢?

最佳答案

如果您的主键是简单的整数字段,我相信您需要做的就是使用@Id 注释。只要您的字段名称与属性名称匹配,它就应该是:

@Id
protected int administratorsPK;

我以前没有使用过@EmbeddedId,但我认为只有在您必须为其定义可嵌入类的复合 PK(请参阅 docs)时才有必要。虽然不知道您的数据库结构,但很难说出 NetBeans 为您生成这些类的原因。

顺便说一句,在我看来,将每个 PK 字段命名为“id”会使事情变得更简单。为了避免 View 和合并的复杂化,只需在 SELECT 语句中使用 AS 关键字重命名它:

SELECT id AS AdministratorsPK FROM Administrators;

关于java - 如何为 Java JDBC EntityManagerFactory 类中的实体设置 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10799613/

相关文章:

php - 如何从外部 PHPMyAdmin 安装连接到 Google 云 SQL 实例?

java - 逐字节读取二进制文件

java - 如何完成三个Queue的实现以及三个Stack的实现?

带有左连接和 having 子句的 MySQL 查询

php - 插入数据库时​​查询错误

sql - 不带 '?'的JDBC RDD查询语句

java - 如何比较没有时间部分的两个日期?

java - HashMap 包含某个键,但告诉我它没有

java - JDBC 中的负载平衡和复制

java - 带有 jdbc applet 的 NoClassDefFoundError