JPA实体没有主键?
我有一个实体类:
@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.
我在线阅读并发现实体必须定义主键。 但我这里的桌子只是一排桌子。 它只是用来保存系统配置。
因此,我只想查询该行是否存在然后获取该行并更新它。
我的列是serverIp,port,服务器的名称 。
我该如何处理删除此错误?
JPA 2.0 Specification
- 必须使用
Entity
批注对实体类进行批注。 - 实体类必须具有无参数构造函数。
- 实体类不能是最终的
- 实体类必须实现
Serializable
接口。 - 实体类必须具有唯一的不可变
ID
否则,你不能。
我有这个问题以及没有PK的消息。
在Oracle中,您可以使用ROWID列,该列始终存在于任何表中。
喜欢这个:
@Id @Column(name="ROWID") String rowid;
希望能帮助到你…
数据库中的每个实体对象都是唯一标识的。 表示没有主键的表的另一种方法是使用复合主键使用其所有列,或者其中一些表示候选键:
@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... */ }
也许你会遇到[按ID选择]的问题:
entityManager.find(TableWithoutId.class, id);//it can throws NonUniqueResultException or anything like that...
保重,快乐!
您可以将applicationName或IP地址标记为主键(尽管不是自动生成的)。 即使这些列都没有被声明为数据库中的主键,也没关系。
- Glassfish 3.0:部署ejb模块时出现exception……无效的ejb j ar:它包含零ejb
- EJB工厂类
- Weblogic在javax.ejb.EJBException中包装应用程序exception
- 使用JPA EntityManager批量插入
- 事务TransactionImple ActionStatus.ABORTED已经回滚
- 在@Table(name =“tableName”)中 – 使“tableName”成为JPA中的变量
- javax.naming.NameNotFoundException
- weblogic ejb ComplianceException
- Glassfish v3 / JNDI入门无法找到问题!