我有一个实体类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中找到该方法。
任何人都可以告诉我为什么会这样,我怎么能解决它?谢谢。
答案 0 :(得分:1)
...你没有发布Java代码,我怀疑它会有所帮助,但是:
如果您拥有复合主键,JPA中的任何时候都必须具有“嵌入式”主键类。我怀疑你有一个类似于以下的类定义:
@Embeddable
public class UserNameId {
private int userid;
private String username;
}
然后usertable
和connectiontable
都包含以下内容(或类似内容):
@Embedded
@Id
private UserNameId userNameId;
...所以你应该期待userNameId
的getter / setter,而不是你期望的嵌入字段。