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

时间:2013-01-23 16:57:16

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

我有一个实体类userdetails,它有username,userid(数字)和密码字段,username和userid组成一个复合主键。这是可以谈判的,并且可能对主要问题不重要。

我有另一个连接表类,它有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。它们处于连接状态,但我似乎无法利用它。例如,当我生成jsf页面时,我希望能够执行以下操作:

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

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

任何人都可以告诉我为什么会这样,我怎么能解决它?谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

@Embedded
@Id
private UserNameId userNameId;

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