0

我有一个实体类 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) 
);

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

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

但它会抱怨,因为它在 connectiontable.java 中找不到该方法。

谁能告诉我为什么会这样,我该如何解决?谢谢你。

4

1 回答 1

1

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

任何时候在 JPA 中当你有一个复合主键时,你都必须有一个“嵌入式”主键类。我怀疑您的类定义类似于以下内容:

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

然后usertableconnectiontable两者都包含以下(或类似的):

@Embedded
@Id
private UserNameId userNameId;

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

于 2013-01-23T17:09:05.057 回答