我有一个实体,它有一个主键/id字段,如下所示:@Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLongid;这很好用。我正在使用EclipseLink创建DDL-Schema,并且该列已正确创建,如下所示:`id`bigint(20)NOTNULLAUTO_INCREMENT但是,我确实有几个实体想要自己指定PK(这是一个将数据从旧数据库传输到我们正在构建的新数据库的小应用程序)。如果我为POJO指定ID(使用setId(Longid))并将其持久化,EclipseLink不保存它(即保存记录,但id是由ecl
一.主键:1.1)主键字段定义:在数据库表中,如果有一组字段能够唯一确定一条记录,则可以把它们设计成表的主键字段。例子:如果要创建一个人的信息表(字段:姓名,年龄,籍贯,工作单位......),那么身份证号是唯一能确定你这个人的,所以身份证号是主键。1.2)创建:主键字段名primarykey1.3)主键的选取原则;原则上使用一个字段做主键,而且推荐使用没有业务含义的字段做主键,比如:id等。1.4)主键值的生成方式:主键字段的类型和长度由主键值的生成方式来决定: 1.4.1)自增:借助数据库自身主键生成机制 数值型长度由数据量来决定
在Hibernate或其他ORM中实现复合主键时,在使用标识关系的复合主键星座(作为PK的一部分的FK)中,最多有三个位置可以放置insertable=false、updatable=false:进入复合PK类的@Column注释(仅限@Embeddable类)或进入实体类的关联@JoinColumn/s注解或进入实体类的冗余PK属性的@Column注解(仅限@IdClass类)第三种方法是使用@IdClass和JPA1.0AFAIK的唯一方法。见http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#
在Hibernate或其他ORM中实现复合主键时,在使用标识关系的复合主键星座(作为PK的一部分的FK)中,最多有三个位置可以放置insertable=false、updatable=false:进入复合PK类的@Column注释(仅限@Embeddable类)或进入实体类的关联@JoinColumn/s注解或进入实体类的冗余PK属性的@Column注解(仅限@IdClass类)第三种方法是使用@IdClass和JPA1.0AFAIK的唯一方法。见http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#
我一直在看各种hibernate教程和示例,对于它们的身份/主键属性,有些使用Java原始类型,有些使用包装器类型,即;privateintid;对privateIntegerid;我为什么以及何时将一个而不是另一个用于实体键? 最佳答案 从Hibernate的角度来看,它不会改变任何东西,因为Hibernate使用相同的Hibernate类型来表示它们。但是,正如BytecodeNinja所指出的,您无法将原始int0的默认值与分配的0区分开来,但不会有歧义使用null(nullid总是意味着一个新实体),这就是为什么我更喜欢使用
我一直在看各种hibernate教程和示例,对于它们的身份/主键属性,有些使用Java原始类型,有些使用包装器类型,即;privateintid;对privateIntegerid;我为什么以及何时将一个而不是另一个用于实体键? 最佳答案 从Hibernate的角度来看,它不会改变任何东西,因为Hibernate使用相同的Hibernate类型来表示它们。但是,正如BytecodeNinja所指出的,您无法将原始int0的默认值与分配的0区分开来,但不会有歧义使用null(nullid总是意味着一个新实体),这就是为什么我更喜欢使用
JPA注解Entity常用注解参考:JPA&SpringDataJPA学习与使用小记指定对象与数据库字段映射时注解的位置:如@Id、@Column等注解指定Entity的字段与数据库字段对应关系时,注解的位置可以在Field(属性)或Property(属性的get方法上),两者统一用其中一种,不能两者均有。推荐用前者。@Entity、@Table@Entity(必需)标注在实体类上。映射实体类。指出该Java类为实体类,将映射到指定的关系数据库表。应用了此注解后,将会自动将类名映射作为数据库表名、将类内的字段名映射为数据库表的列名。映射策略默认是按驼峰命名法拆分将类名或字段名拆分成多部分,然后
JPA注解Entity常用注解参考:JPA&SpringDataJPA学习与使用小记指定对象与数据库字段映射时注解的位置:如@Id、@Column等注解指定Entity的字段与数据库字段对应关系时,注解的位置可以在Field(属性)或Property(属性的get方法上),两者统一用其中一种,不能两者均有。推荐用前者。@Entity、@Table@Entity(必需)标注在实体类上。映射实体类。指出该Java类为实体类,将映射到指定的关系数据库表。应用了此注解后,将会自动将类名映射作为数据库表名、将类内的字段名映射为数据库表的列名。映射策略默认是按驼峰命名法拆分将类名或字段名拆分成多部分,然后
我在一张表上有多个(复合)主键,其中一个是自动递增的。然而,有趣的是,SQLite允许在强制性PRIMARYKEY关键字之后使用AUTOINCREMENT关键字。我的查询是:CREATETABLEticket(idINTEGERPRIMARYKEYAUTOINCREMENT,seatTEXT,paymentINTEGER,PRIMARYKEY(id,seat))但是错误是table"ticket"hasmorethanoneprimarykey。其实我可以避免这个表的其他主键。但是我正在编写一个ORM框架(见鬼,我疯了)并且不想更改表的PRIMARYKEY约束生成的结构(因为它在MyS
我有一个名为provider的表。我有三列分别称为person、place、thing。可以有重复的人、重复的地点和重复的事物,但永远不会有重复的人-地点-事物组合。我将如何ALTERTABLE为MySQL中的该表添加这三列的复合主键? 最佳答案 ALTERTABLEproviderADDPRIMARYKEY(person,place,thing);如果主键已经存在,那么你想这样做ALTERTABLEproviderDROPPRIMARYKEY,ADDPRIMARYKEY(person,place,thing);