1

我已经用 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;

我相信应该是这样,但我担心这个信息——我应该做些什么来让它发挥作用吗?

它抛出错误:

异常描述:实体类 [class kwestionariusz.manager.View2] 没有指定主键。它应该定义@Id、@EmbeddedId 或@IdClass。如果您使用这些注释中的任何一个定义了 PK,请确保您的实体类层次结构中没有混合访问类型(已注释的字段和属性)。

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

4

1 回答 1

1

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

@Id
protected int administratorsPK;

我以前没有使用过@EmbeddedId,但我认为只有当你有一个复合 PK(参见文档),你必须为其定义一个 Embeddable 类时才需要。尽管不知道您的数据库结构,但很难说 NetBeans 为您生成这些类的原因。

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

SELECT id AS AdministratorsPK FROM Administrators;
于 2012-05-29T13:50:04.337 回答