<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
預設情況下,主鍵是一個連續的64位元數位(long),它由ObjectDB自動為儲存在資料庫中的每個新實體物件自動設定。
資料庫中的第一個實體物件的主鍵是1,第二個實體物件的主鍵是2等等。
當從資料庫中刪除實體物件時,主鍵值不會被回收。
一個實體的主鍵值可以通過宣告一個主鍵欄位來存取:
@Entity public class Project { @Id @GeneratedValue long id; // still set automatically }
@id
標註將欄位標記為一個主鍵欄位。當定義主鍵欄位時,主鍵值將被ObjectDB自動注入到該欄位中。@generatedvalue
註釋指定主鍵是由ObjectDB自動分配的如果一個實體有一個沒有@generatedvalue標記的主鍵欄位,則不會生成自動主鍵值,並且應用程式負責通過初始化主鍵欄位來設定主鍵。這必須在持久化實體物件的任何嘗試之前完成。
@Entity public class Project { @Id long id; // must be initialized by the application }
應用程式設定的主鍵欄位可以有以下型別:
● 原始型別: boolean, byte, short, char, int, long, float, double.
● java.lang包中的包裝型別:Byte, Short, Character, Integer, Long, Float, Double.
● java.math.BigInteger, java.math.BigDecimal.
● java.lang.String.
● java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp.
● 列舉型別
● 參照一個實體物件
複合主鍵由多個主鍵欄位組成。每個主鍵欄位必須是上面列出的支援型別之一。
例如,以下專案實體類的主鍵由兩個欄位組成:
@Entity @IdClass(ProjectId.class) public class Project { @Id int departmentId; @Id long projectId; }
當一個實體有多個主鍵欄位時,JPA需要定義一個特殊的ID類,該類是使用@idclass註釋附加到實體類的。ID類反映了主鍵欄位,它的物件可以表示主鍵值:
Class ProjectId { int departmentId; long projectId; }
ObjectDB不強制定義ID類。但是,如果實體物件必須按照檢索實體部分中所示的主鍵來檢索實體物件,那麼就需要ID類。
表示複合主鍵的另一種方法是使用可嵌入的類:
@Entity public class Project { @EmbeddedId ProjectId id; } @Embeddable Class ProjectId { int departmentId; long projectId; }
主鍵欄位是在可嵌入類中定義的。
該實體包含一個單獨的主鍵欄位,該欄位用@EmbeddedId 註釋,幷包含一個可嵌入類的範例。
當使用這個表單時,沒有定義一個單獨的ID類,因為可嵌入的類本身可以表示完整的主鍵值。
使複合主鍵類成為非嵌入類,使用 @IdClass 批註為實體指定一個複合主鍵類(通常由兩個或更多基元型別或 JDK 物件型別組成)。從原有資料庫對映時(此時資料庫鍵由多列組成),通常將出現複合主鍵。
複合主鍵類具有下列特徵:
package com.model; import java.io.Serializable; public class SysUserRoleId implements Serializable{ /** * */ private static final long serialVersionUID = 2606793267849167078L; private Long userId; private Long roleId; @Override public int hashCode(){ int result = 1; result = userId.hashCode()+roleId.hashCode(); return result; } @Override public boolean equals(Object obj){ if(obj == null){ return false; } if(this == obj){ return true; } if(getClass() != obj.getClass()){ return false; } final SysUserRoleId other = (SysUserRoleId) obj; if(other.getUserId().equals(this.userId) && other.getRoleId().equals(this.roleId)){ return true; } return false; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } }
package com.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.Table; @Entity @Table(name="SYS_USER_ROLE") @IdClass(SysUserRoleId.class) public class SysUserRole { private Long userId; private Long roleId; public SysUserRole(){ } public SysUserRole(Long userId,Long roleId){ this.userId = userId; this.roleId = roleId; } @Id @Column(name="user_id") public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } @Id @Column(name="role_id") public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } }
使複合主鍵類成為由實體擁有的嵌入類
使用 @EmbeddedId 批註指定一個由實體擁有的可嵌入複合主鍵類(通常由兩個或更多基元型別或 JDK 物件型別組成)。從原有資料庫對映時(此時資料庫鍵由多列組成),通常將出現複合主鍵。
複合主鍵類具有下列特徵:
package com.model; import java.io.Serializable; import javax.persistence.Column; @SuppressWarnings("serial") public class SysOrganizationRolePKId implements Serializable{ private Long organizationId; private Long roleId; @Column(name="organization_id") public Long getOrganizationId() { return organizationId; } public void setOrganizationId(Long organizationId) { this.organizationId = organizationId; } @Column(name="role_id") public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } }
package com.model; import java.io.Serializable; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.Table; @Entity @SuppressWarnings("serial") @Table(name="SYS_ORGANIZATION_ROLE") public class SysOrganizationRole implements Serializable{ private SysOrganizationRolePKId sysOrganizationRolePKId; @EmbeddedId public SysOrganizationRolePKId getSysOrganizationRolePKId() { return sysOrganizationRolePKId; } public void setSysOrganizationRolePKId( SysOrganizationRolePKId sysOrganizationRolePKId) { this.sysOrganizationRolePKId = sysOrganizationRolePKId; } }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45