0

ユーザー名、ユーザーID(数値)、およびパスワードのフィールドを持つエンティティクラスuserdetailsがあり、ユーザー名とユーザーIDが複合主キーを形成しています。これは交渉可能であり、おそらく主要な問題にとって重要ではありません。

もう1つのクラス、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) 
);

接続可能なものは他にもたくさんありますが、それらは無関係です。私はnetbeans7.2.1とJaveEE6を使用しています。「データベースエントリからエンティティを作成する」を使用していますが、何らかの理由で、ユーザーIDまたはユーザー名のゲッターとセッターがありません。それらは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;

...したがって、期待するuserNameIdように、埋め込みフィールドではなく、のゲッター/セッターを期待する必要があります。

于 2013-01-23T17:09:05.057 に答える