私はエンティティクラスがあります:
@Entity
@Table(name="CMC_MAP_SERVER_INFO")
@NamedQuery(name="CmcMapServerInfo.getMapServer", query="SELECT c FROM CmcMapServerInfo c")
public class CmcMapServerInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="APPLICATION_NAME")
private String applicationName;
private String remarks;
@Column(name="SERVER_IP")
private String serverIp;
@Column(name="SERVER_NAME")
private String serverName;
@Column(name="SERVER_PORT")
private short serverPort;
public CmcMapServerInfo() {
}
次のエラーが発生します。
Entity class [class cdot.oss.cmsat.conf.ejb.entity.CmcMapServerInfo] has no primary key specified.
オンラインで読んだところ、エンティティには主キーが定義されている必要があることがわかりました。しかし、ここでの私のテーブルは1行のテーブルのみです。システム構成を保存するためだけに使用されました。
そのため、行が存在するかどうかを確認し、その行を取得して更新することだけが、クエリで行います。
私の列はserverIp、ポート、サーバーの名前です。
このエラーを削除するにはどうすればよいですか?
PKなしのメッセージでこの問題も発生しました。
Oracleでは、どのテーブルにも常に存在するROWID列を使用できます。
このような:
@Id
@Column(name="ROWID")
String rowid;
それが役に立てば幸い...
Entity
アノテーションを付ける必要があります。Serializable
インターフェースを実装する必要があります。ID
が必要ですそれ以外の場合はできません。
データベース内のすべてのエンティティオブジェクトは一意に識別されます。主キーなしでテーブルを表す別の方法は、すべての列を使用して複合主キーを使用すること、またはそれらのいくつかは候補キーを表すことです。
@Entity
public class TableWithoutId {
@EmbeddedId EmbeddableTableWithoutId id;
/* Getters an Setters... */
//Here you can implement @Transient delegates to the Getters an Setters of "id".
}
@Embeddable
Class EmbeddableTableWithoutId {
int columnA;
long columnB;
/* Getters an Setters... */
}
[Select By Id]で問題が発生する可能性があります。
entityManager.find(TableWithoutId.class, id);//it can throws NonUniqueResultException or anything like that...
気を付けて、幸せになってください!!!
ApplicationNameまたはIPアドレスを主キーとしてマークできます(自動生成されません)。これらの列のどちらもデータベースで主キーとして宣言されていなくても問題ありません。
別の方法は、クラス自体を@IdClassで一意の識別子として使用できるように指定することです。したがって、この場合は、@ IdClass(CmcMapServerInfo.class)でクラスに注釈を付けるだけで、基礎となるデータベースから独立している必要があります。