首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EclipseLink错误:实体类没有指定主键.它应该定义@ Id,@ EmbeddedId或@IdClass

这个错误通常表示在实体类中没有指定主键。在 EclipseLink 中,实体类需要指定主键,可以使用 @Id, @EmbeddedId@IdClass 注解。

如果没有指定主键,EclipseLink 将会抛出异常。解决这个问题的方法是在实体类中添加主键注解。例如,以下是一个使用 @Id 注解的实体类:

代码语言:java
复制
@Entity
@Table(name = "my_table")
public class MyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    // getters and setters
}

在这个实体类中,我们使用了 @Id 注解来指定主键,同时使用了 @GeneratedValue 注解来指定主键生成策略为 IDENTITY。在实体类中,还可以使用 @EmbeddedId@IdClass 注解来指定主键。

如果需要在实体类中指定主键,可以在实体类中添加相应的注解。例如,以下是一个使用 @EmbeddedId 注解的实体类:

代码语言:java
复制
@Entity
@Table(name = "my_table")
public class MyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @EmbeddedId
    private Key key;

    // getters and setters
}

在这个实体类中,我们使用了 @EmbeddedId 注解来指定主键,同时使用了 @GeneratedValue 注解来指定主键生成策略为 IDENTITY。在实体类中,还可以使用 @IdClass 注解来指定主键。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JPA实体类中的注解

@Entity   标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类 @Table   标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相对应...@Id @Id设置对象表示符,标识的实体类的属性映射对应表中的主键 @GeneratedValue 设置标识符的生成策略,常与@Id一起使用  参数:strategy指定具体的生成策略  方式一:@...)注解配合使用  其中name指定生成器的名字(与generator的值一样),sequenceName指定数据库中定义序列的名字,allocationSize指定序列每次增长1 @Column 描述数据库表中该字段的定义...该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity。 @OneToMany 描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段。 ...,其关联的实体也应当被更新删除  例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除 @ManyToMany 描述一个多对多的关联

3.9K70
  • Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

    比如:当有一个UserDao.findUserById() 这样一个方法声明,大致应该能判断出这是根据给定条件的 ID 查询出满足条件的 User 对象。...@Id 注解表示这个字段是一个 id,@GeneratedValue 注解表示主键的自增长策略,对于类中的其他属性,默认都会根据属性名在表中生成相应的字段,字段名和属性名相同,如果开发者想要对字段进行定制...select 用来指定查询返回的结果实体实体的某些属性。 from 子句声明查询源实体类,并指定标识符变量(相当于SQL表的别名)。 如果不希望返回重复实体,可使用关键字 distinct 修饰。...与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。...注意: JPQL 不支持使用 INSERT 方法的返回值应该是 int,表示更新语句所影响的行数 在调用的地方必须加事务,没有事务不能正常执行 默认情况下, Spring Data 的每个方法上有事务,

    2K10

    什么是JPA?Java Persistence API简介

    JPA规范允许您定义应该保留哪些对象,以及如何在Java应用程序中保留这些对象。 JPA本身不是一个工具框架; 相反,定义了一组可以由任何工具框架实现的概念。...传统配置是节省时间的,并且在许多情况下运行良好。也可以自定义JPA配置。例如,您可以使用JPA的@Table注释来指定应该存储Musician类的表。 清单5....主键 在JPA中,主键是用于唯一标识数据库中每个对象的字段。主键可用于引用对象并将对象与其他实体相关联。每当您在表中存储对象时,您还将指定要用作其主键的字段。...清单6.指定主键 @Entity public class Musician { @Id private Long id; 在这种情况下,我们使用JPA的@Id注释将id字段指定为Musician...调用session.save()将创建更新指定的类,具体取决于主键字段是否为null或是否适用于现有实体。调用entityManager.remove()将删除指定的类。

    10.2K30

    SpringDataJPA笔记(1)-基础概念和注解

    @Entity 标注用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表。...里的@Column设置都将不起作用 JPA规范中对@Lob注解并没有说明不能同时标注@Column注解,但是在实际使用中Hibernate JPA不支持这中标注方式 @Id @Id 标注用于声明一个实体类的属性映射为数据库的主键列...@Id标注也可置于属性的getter方法之前。 @GeneratedValue @GeneratedValue 用于标注主键的生成策略,通过 strategy 属性指定。...JoinColumn,用JoinColumns定义多个JoinColumn的属性 @IdClass 当entity class使用复合主键时,需要定义一个类作为id class。...默认用主键值做key,如果使用复合主键,则用id class的实例做key,如果指定了name属性,就用指定的field的值做key @OrderBy 在一对多,多对多关系中,有时我们希望从数据库加载出来的集合对象是按一定方式排序的

    3.9K20

    干货|一文读懂 Spring Data Jpa!

    比如:当有一个 UserDao.findUserById() 这样一个方法声明,大致应该能判断出这是根据给定条件的 ID 查询出满足条件的 User 对象。...@Id注解表示这个字段是一个id,@GeneratedValue注解表示主键的自增长策略,对于类中的其他属性,默认都会根据属性名在表中生成相应的字段,字段名和属性名相同,如果开发者想要对字段进行定制,可以使用...select 用来指定查询返回的结果实体实体的某些属性。 from 子句声明查询源实体类,并指定标识符变量(相当于SQL表的别名)。 如果不希望返回重复实体,可使用关键字 distinct 修饰。...与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。...注意: JPQL 不支持使用 INSERT 方法的返回值应该是 int,表示更新语句所影响的行数 在调用的地方必须加事务,没有事务不能正常执行 默认情况下, Spring Data 的每个方法上有事务,

    2.8K20

    了解 Spring Data JPA

    该接口使用了泛型,需要为其提供两个类型:第一个为该接口处理的域对象类型,第二个为该域对象的主键类型。...配置了 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 其子接口的接口创建代理对象,并将代理对象注册为...与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。...Pageable Sort 类型的参数,用于指定分页排序信息即可,这比直接使用 PagingAndSortingRepository 提供了更大的灵活性。...",框架在创建代理类的过程中,解析到该方法时,优先查找名为 "AccountInfo.findTop5" 的命名查询定义,如果没有找到,则尝试解析方法名,根据方法名字创建查询。

    2K20

    flea-db使用之JPA接入

    接入讲解2.1 实体类新建如下学生表对应的实体类 Student,对应测试表 student。...@Qualifier("studentDAO") :通常与 @Autowired 一起使用,用于指定 @Autowired 应该注入的特定 Bean。...} catch (Exception e) { LOGGER.error("Exception : ", e); } }上述演示代码逻辑:首先根据指定主键...,调用 query 方法查询学生信息,并打印 Before :XXX;然后调用 update 方法更新该学生信息;最后再根据指定主键,调用 query 方法查询学生信息,并打印After : XXX。...,调用 query 方法查询学生信息,并打印 Before :XXX;然后调用 remove 方法删除指定主键的学生信息(里面会先去将学生实体信息查出来,然后再删除);最后再根据指定主键,调用 query

    15121

    ORM和 Spring Data Jpa

    比如:当有一个 UserDao.findUserById() 这样一个方法声明,大致应该能判断出这是根据给定条件的 ID 查询出满足条件的 User 对象。...@Id注解表示这个字段是一个id,@GeneratedValue注解表示主键的自增长策略,对于类中的其他属性,默认都会根据属性名在表中生成相应的字段,字段名和属性名相同,如果开发者想要对字段进行定制,可以使用...select 用来指定查询返回的结果实体实体的某些属性。 from 子句声明查询源实体类,并指定标识符变量(相当于SQL表的别名)。...与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。...注意: JPQL 不支持使用 INSERT 方法的返回值应该是 int,表示更新语句所影响的行数 在调用的地方必须加事务,没有事务不能正常执行 默认情况下, Spring Data 的每个方法上有事务

    3.3K30

    如何在 Spring Boot 中 读写数据

    (2)@Table(name = "自定义表名") 类注解,用于自定义实体类在数据库中所对应的表名,默认是实体类名。特别是那些被作为数据库关键字的实体类名,就会用到这个注解来指定表名。...(3)@Id 类变量注解,用于指定主键。 (4)@GeneratedValue 类变量注解,用于指定主键的生成策略。 包含strategy属性,具体说明如下: ?...比如用户类会有一个指定密码表的主键 pwd_id,将 @OneToOne 放置在用户类的 pwd 字段上,就可以表示用户类与密码类是一对一的关系,并且主导类是用户类。...,其实本质上是 @Id 与 @JoinColumn(name = "...") 的组合体。...List users; @JoinColumn 中的 name 属性用于指定当前实体类(部门)所对应表的关联 ID;inverseJoinColumns 属性用于指定所关联的实体类表(员工

    15.9K10

    持久层变化历史和Mybatis的到来

    方法的封装(jdbcTemplate) 但是还有一些以下问题存在,因此称不上一个框架 1,SQL语句硬编码 2、参数只能按顺序传入(占位符) 3、没有实现实体类到数据库记录的映射 4、没有提供缓存等功能...即Object-Relationl Mapping,的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了...主键注解,这俩框架就会自动帮我们生成SQL 语句(屏蔽数据库的差异),自动进行映射。...@Entity//声明实体类 @Table(name = "tb_friend")//只要使用jpa就要指定实体类关联的数据库表 @IdClass(Friend.class) public class...Friend implements Serializable { //我们这个地方数据库用的是联合主键 @Id private String userid; private

    29830

    flea-db使用之JPA封装介绍

    定义了 Java 对象如何映射到关系型数据库中的表,并提供了一套标准的 API 来管理这些映射关系以及数据库中的持久化对象。...新版本已废弃(单例模式,本身没有问题,但是由于获取之后 Flea JPA 查询对象还要使用,这在有点并发的环境下就存在问题了;后面我会单独写一篇博文讲解基于对象池的多例模式,既保证并发下各个线程获取的...String attrName, String orderBy) : 添加 order by 子句addGroupBy(String attrName) : 添加 group by 子句获取查询结果(记录行 ...该类实现上述抽象 Flea JPA DAO 层接口,同样有类型T,由子类指定其操作的实体类。...public abstract class AbstractFleaJPADAOImpl implements IAbstractFleaJPADAO 无参构造方法,用于获取子类指定实体类类对象

    20921

    工作流中的数据持久化详解!Activiti框架中JPA的使用分析

    可以在用户任务的表单中填写或者由服务任务生成 重用已有的领域模型,不需要编写显示的服务获取实体或者更新实体的值 根据已有实体的属性做出判断(网关即分支聚合) JPA实体要求 Activiti中JPA只支持符合以下要求的实体: 实体应该使用...@MappedSuperclass也要能够被使用 实体中应该有一个使用@Id注解的主键,不支持复合主键@EmbeddedId 和 @IdClass: Id字段或者属性能够使用JPA规范支持的任意类型:...EntityManager实例上,该标记表示流程引擎是否需要开始和提交或者回滚事务: 当使用Java事务API(JTA) 时,设置为false jpaCloseEntityManager: 该标记表示流程引擎是否应该关闭从...updateJPAEntityTask' activiti:expression="${entityToUpdate.setValue('updatedValue')}" /> 当完成服务任务时,流程实例将会停留在流程定义定义的用户任务环节上...> 上面的例子展示了JPA结合Spring和参数化方法表达式的强大优势 :所有的流程就不需要自定义java代码(Spring bean除外),大幅度的加快了流程部署

    1.8K20

    Hibernate框架学习之注解映射实体类

    @Table(name = "userInfo"):详细指定了该类映射到数据库中的哪张表,这里映射到userInfo表。 @Id指定被修饰的属性将映射到数据表的主键列。...**我们也可以使用注解@Transient修饰属性**,指明了该属性不会被映射到数据表中某一列,而只是作为一个属性被定义实体类中。...三、使用注解映射主键属性 最简单的情况下,我们使用注解@Id标识实体类中的某个属性,那么该属性将会被hibernate映射到数据库主键字段,并且无需指定任何属性值。...使用使用@GeneratedValue指定主键的生成策略,通过的strategy属性来指定具体的主键生成方案,该属性可以取如下几个值: GenerationType.AUTO:hibernate默认为该值...而对于有序集合来说,还应该包含一个字段用于保存每个集合元素在集合中的序号,该序号字段和第一个外键依赖字段组合成新表的联合主键,唯一标识一条记录。

    3.1K90

    SQLSERVER 占了500多M内存,原来的程序无法一次查询出50多W数据了,记录下这个问题的解决过程。

    看了下表结构,还有一个ID字段(bigint类型),虽然不是主键,但不重复,这样我们可以使用这个字段作为“分页”的依据了,每次查询个10-20W数据是没有问题,于是将原来的实体类修改为下面的样子: namespace... FundYield 中,有一个实体映射类型属性: EntityMap=EntityMapType.SqlMap;//映射为自定义SQL查询 默认情况下,应该是 EntityMap=EntityMapType.Table...;//映射为表 数据更新实体类必须继承一个数据更新接口: WcfMail.Interface.IDataSyncEntity 好了,实体类的修改仅此以处,实体类映射指定为SqlMap类型,必须建立一个...--SQL-MAP 实体类定义查询配置文件 SQL 语句不能使用 Select * from table 格式,必须指定实体类一致的字段定义,否则可能发生难以预测的错误。...600000 and ID<800000 最后的工作就是等待执行完成,这个任务就OK了。

    56190

    高级框架-springDate-JPA 第二天【悟空教程】

    4.3 实体类关系建立以及映射配置 在实体类中,由于客户是少的一方,应该包含多个联系人,所以实体类要体现出客户中有多个联系人的信息,代码如下: /** * 客户的实体类 * 明确使用的注解都是...)//指定主键的生成策略 @Column(name="cust_id")//指定和数据库表中的 cust_id 列对应 private Long custId; @Column(name="cust_name...* 2、如果配置了放弃维护关联关系的权利,则不能删除(与外键字段是否允许为 null,没有关系) * 因为在删除时,根本不会去更新从表的外键字段了。...5.3 实体类关系建立以及映射配置 一个用户可以具有多个角色,所以在用户实体类应该包含多个角色的信息,代码如下: /** * 用户的数据模型 */ @Entity @Table(name=...的写法是: 把查询的表名换成实体类名称,把表中的字段名换成实体类的属性名称。 注意: 此处我们必须明确,实体类属性名称指的是 get/set 方法后面的部分,且首字母改小写。

    2.5K10

    Mybatis-Puls 常用注解

    value属性 2.2 @TableId的type属性 3、@TableField 4、@TableLogic ---- 1、@TableName 在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表...若实体类和表中表示主键的不是id,而是其他字段,例如uid,MyBatis-Plus会自动识别uid为主键列吗? 我们将实体类中的属性id改为uid,将表中的字段id也改为uid,测试添加功能。...程序抛出异常,Field 'uid' doesn't have a default value,说明MyBatis-Plus没有将uid作为主键赋值 。...此时需要通过@TableId注解的value属性,指定表中的主键字段,@TableId("uid") @TableId(value="uid")。...2.2 @TableId的type属性 type属性用来定义主键策略 常用的主键策略: 值 描述 IdType.ASSIGN_ID(默认) 基于雪花算法的策略生成数据id,与数据库id是否设置自增无关

    64030

    tkmybatis详细教程(一篇就明白)

    定义各种 sql 语句的基础,通过灵活的拼接,查询参数的设置,可以满足开发者各种的数据库查询要求。 既然如此,那我猜 tkmybatis 的底层是动态代理实现的。 3....int delete(T var1); 注意:在定义实体类时,每个成员变量的类型都应该是Java类,不能是基本类型,比如整型,应该用 Integer,而不是 int。...比如前段发送的删除请求,参数实体如下,height字段为 null,本来意思是不把 height 字段作为删除的条件字段,如果 Java 实体类的 height 字段类型定义为 Integer,那一切正常...0; 这样就违背了本意,容易造成错误的删除后果。...delete from table where id in (id值1,id值2,…,id值n) int deleteByIds(String var1); 5 自定义查询条件 5.1 删改查方法 图中接口都有一个共同点

    4.7K31
    领券