java - 具有复合主键的实体类没有 getter 和 setter

标签 java jpa foreign-keys composite-primary-key

我有一个实体类 userdetails,其中包含用户名、用户 ID(数字)和密码字段,用户名和用户 ID 形成复合主键。这是可以协商的,而且对于主要问题可能并不重要。

我有另一个类,connectiontable,它以 userid 作为主键。生成相关表的sql代码如下:

create table usertable
(
userid int NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
username varchar(128) NOT NULL UNIQUE,
password varchar(128) NOT NULL, 
CONSTRAINT USER_PK PRIMARY KEY(username, userid)

);

这是usertable的sql代码。以下是连接表

create table connectiontable
(
userid int not null,
username varchar(128) not null,
connections varchar(32670) not null,

CONSTRAINT CONNECTION_PK PRIMARY KEY(username, userid),
CONSTRAINT CONNECTION_FK FOREIGN KEY(username,userid) REFERENCES usertable(username,userid) 
);

连接表中还有很多其他内容,但这些都是无关紧要的。我使用 netbeans 7.2.1 和 Jave EE6。我使用“从数据库条目创建实体”,但由于某种原因,我没有 userid 或 username 的 getter 和 setter。它们在connectiontablePK中,但我似乎无法利用它。例如,当我生成 jsf 页面时,我希望能够执行以下操作:

Connectiontable con = new Connectiontable();
con.getUsername();

但是它会提示,因为它在connectiontable.java中找不到该方法。

谁能告诉我为什么会出现这种情况,以及如何解决它?谢谢。

最佳答案

...您没有发布 Java 代码,我怀疑这会有所帮助,但是:

在 JPA 中,只要您有复合主键,就必须有一个“嵌入”主键类。我怀疑您的类定义类似于以下内容:

@Embeddable
public class UserNameId {
    private int userid;
    private String username;
}

然后 usertableconnectiontable 都包含以下内容(或类似内容):

@Embedded
@Id
private UserNameId userNameId;

...所以您应该期待 userNameId 的 getter/setter,而不是像您期望的那样的嵌入字段。

关于java - 具有复合主键的实体类没有 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14485125/

相关文章:

java - 从http get请求中读取非英文字符

java - 我的java代码的输出有问题

java - 如何在JPA中使用where子句从连接表中获取数据?

mysql - 在没有 native 查询的情况下在 JPA 中更新

mysql - 如何检索存储在多行中的 "dynamic"属性作为正常记录?

java - 我无法使用 iCal4j 正确设置 Activity 日期

java - 在运行 tomcat 服务器/实例时打开 ObjectDB 资源管理器

java - 如何正确映射主键由两个外键组成的实体,其中一个外键本身是复合的?

PHP 版本 5.3.10 删除外键

java - 在另一个类中使用局部变量的方法(在jsp页面中显示)