网站的结构布局,石家庄到底怎样了,定制网站建设广告,网站左侧悬浮导航代码Table Table用来定义entity主表的name#xff0c;catalog#xff0c;schema等属性。 元数据属性说明#xff1a; name: 表名catalog: 对应关系数据库中的catalogschema#xff1a;对应关系数据库中的schemaUniqueConstraints:定义一个UniqueConstraint数组#xff0c;指定… Table Table用来定义entity主表的namecatalogschema等属性。 元数据属性说明 name: 表名catalog: 对应关系数据库中的catalogschema对应关系数据库中的schemaUniqueConstraints:定义一个UniqueConstraint数组指定需要建唯一约束的列 Table(nametbl_sky, uniqueConstraints {UniqueConstraint(columnNames{month, day})}) 如果是单一字段约束可以用 Table(nametbl_sky, uniqueConstraints {UniqueConstraint(columnNamesmonth)}) 1 Entity
2 Table(nameCUST)
3 public class Customer { ... } SecondaryTable 一个entity class可以映射到多表SecondaryTable用来定义单个从表的名字主键名字等属性。 元数据属性说明 name: 表名catalog: 对应关系数据库中的catalogschema对应关系数据库中的schemapkJoin: 定义一个PrimaryKeyJoinColumn数组指定从表的主键列UniqueConstraints:定义一个UniqueConstraint数组指定需要建唯一约束的列下面的代码说明Customer类映射到两个表主表名是CUSTOMER从表名是CUST_DETAIL从表的主键列和主表的主键列类型相同列名为CUST_ID。 1 Entity
2 Table(nameCUSTOMER)
3 SecondaryTable(nameCUST_DETAIL,pkJoinPrimaryKeyJoinColumn(nameCUST_ID))
4 public class Customer { ... } SecondaryTables 当一个entity class映射到一个主表和多个从表时用SecondaryTables来定义各个从表的属性。 元数据属性说明 value 定义一个SecondaryTable数组指定每个从表的属性。 1 Table(name CUSTOMER)
2 SecondaryTables( value {
3 SecondaryTable(name CUST_NAME, pkJoin { PrimaryKeyJoinColumn(name STMO_ID, referencedColumnName id) }),
4 SecondaryTable(name CUST_ADDRESS, pkJoin { PrimaryKeyJoinColumn(name STMO_ID, referencedColumnName id) }) })
5 public class Customer {} UniqueConstraint UniqueConstraint定义在Table或SecondaryTable元数据里用来指定建表时需要建唯一约束的列。 元数据属性说明 columnNames:定义一个字符串数组指定要建唯一约束的列名。 1 Entity
2 Table(nameEMPLOYEE,
3 uniqueConstraints{UniqueConstraint(columnNames{EMP_ID, EMP_NAME})}
4 )
5 public class Employee { ... } Column Column元数据定义了映射到数据库的列的所有属性列名是否唯一是否允许为空是否允许更新等。 元数据属性说明 name:列名。unique: 是否唯一nullable: 是否允许为空insertable: 是否允许插入updatable: 是否允许更新columnDefinition: 定义建表时创建此列的DDLsecondaryTable: 从表名。如果此列不建在主表上默认建在主表该属性定义该列所在从表的名字。 1 public class Person {
2 Column(name PERSONNAME, unique true, nullable false, updatable true)
3 private String name;
4
5 Column(name PHOTO, columnDefinition BLOB NOT NULL, secondaryTablePER_PHOTO)
6 private byte[] picture; JoinColumn 如果在entity class的field上定义了关系one2one或one2many等我们通过JoinColumn来定义关系的属性。JoinColumn的大部分属性和Column类似。 元数据属性说明 name:列名。referencedColumnName:该列指向列的列名建表时该列作为外键列指向关系另一端的指定列unique: 是否唯一nullable: 是否允许为空insertable: 是否允许插入updatable: 是否允许更新columnDefinition: 定义建表时创建此列的DDLsecondaryTable: 从表名。如果此列不建在主表上默认建在主表该属性定义该列所在从表的名字。下面的代码说明Custom和Order是一对一关系。在Order对应的映射表建一个名为CUST_ID的列该列作为外键指向Custom对应表中名为ID的列。 1 public class Custom {
2
3 OneToOne
4 JoinColumn(
5 nameCUST_ID, referencedColumnNameID, uniquetrue, nullabletrue, updatabletrue)
6 public Order getOrder() {
7 return order;
8 } JoinColumns 如果在entity class的field上定义了关系one2one或one2many等并且关系存在多个JoinColumn用JoinColumns定义多个JoinColumn的属性。 元数据属性说明 value: 定义JoinColumn数组指定每个JoinColumn的属性。下面的代码说明Custom和Order是一对一关系。在Order对应的映射表建两列一列名为CUST_ID该列作为外键指向Custom对应表中名为ID的列,另一列名为CUST_NAME该列作为外键指向Custom对应表中名为NAME的列。 1 public class Custom {
2 OneToOne
3 JoinColumns({
4 JoinColumn(nameCUST_ID, referencedColumnNameID),
5 JoinColumn(nameCUST_NAME, referencedColumnNameNAME)
6 })
7 public Order getOrder() {
8 return order;
9 } Id 声明当前field为映射表中的主键列。id值的获取方式有五种TABLE, SEQUENCE, IDENTITY, AUTO, NONE。Oracle和DB2支持SEQUENCESQL Server和Sybase支持IDENTITY,mysql支持AUTO。所有的数据库都可以指定为AUTO我们会根据不同数据库做转换。NONE (默认)需要用户自己指定Id的值。元数据属性说明 generate():主键值的获取类型generator():TableGenerator的名字当generateGeneratorType.TABLE才需要指定该属性下面的代码声明Task的主键列id是自动增长的。(Oracle和DB2从默认的SEQUENCE取值SQL Server和Sybase该列建成IDENTITYmysql该列建成auto increment。) 1 Entity
2 Table(name OTASK)
3 public class Task {
4 Id(generate GeneratorType.AUTO)
5 public Integer getId() {
6 return id;
7 }
8 } IdClass 当entity class使用复合主键时需要定义一个类作为id class。id class必须符合以下要求:类必须声明为public并提供一个声明为public的空构造函数。必须实现Serializable接覆写 equals()和hashCode方法。entity class的所有id field在id class都要定义且类型一样。 元数据属性说明 value: id class的类名 1 public class EmployeePK implements java.io.Serializable{2 String empName;3 Integer empAge;4 5 public EmployeePK(){}6 public boolean equals(Object obj){ ......}7 public int hashCode(){......}8 }9
10 IdClass(valuecom.acme.EmployeePK.class)
11 Entity(accessFIELD)
12 public class Employee {
13 Id String empName;
14 Id Integer empAge;
15 } MapKey 在一对多多对多关系中我们可以用Map来保存集合对象。默认用主键值做key如果使用复合主键则用id class的实例做key如果指定了name属性就用指定的field的值做key。 元数据属性说明 name: 用来做key的field名字下面的代码说明Person和Book之间是一对多关系。Person的books字段是Map类型用Book的isbn字段的值作为Map的key。 1 Table(name PERSON)
2 public class Person {
3
4 OneToMany(targetEntity Book.class, cascade CascadeType.ALL, mappedBy person)
5 MapKey(name isbn)
6 private Map books new HashMap();
7 } OrderBy 在一对多多对多关系中有时我们希望从数据库加载出来的集合对象是按一定方式排序的这可以通过OrderBy来实现默认是按对象的主键升序排列。 元数据属性说明 value: 字符串类型指定排序方式。格式为fieldName1 [ASC|DESC],fieldName2 [ASC|DESC],......,排序类型可以不指定默认是ASC。下面的代码说明Person和Book之间是一对多关系。集合books按照Book的isbn升序name降序排列。 1 Table(name MAPKEY_PERSON)
2 public class Person {
3
4 OneToMany(targetEntity Book.class, cascade CascadeType.ALL, mappedBy person)
5 OrderBy(name isbn ASC, name DESC)
6 private List books new ArrayList();
7 } PrimaryKeyJoinColumn 在三种情况下会用到PrimaryKeyJoinColumn。 继承。entity class映射到一个或多个从表。从表根据主表的主键列列名为referencedColumnName值的列建立一个类型一样的主键列列名由name属性定义。one2one关系关系维护端的主键作为外键指向关系被维护端的主键不再新建一个外键列。元数据属性说明 name:列名。referencedColumnName:该列引用列的列名columnDefinition: 定义建表时创建此列的DDL下面的代码说明Customer映射到两个表主表CUSTOMER,从表CUST_DETAIL从表需要建立主键列CUST_ID该列和主表的主键列id除了列名不同其他定义一样。 1 Entity
2 Table(nameCUSTOMER)
3 SecondaryTable(nameCUST_DETAIL,pkJoinPrimaryKeyJoinColumn(nameCUST_IDreferencedColumnNameid))
4 public class Customer {
5 Id(generate GeneratorType.AUTO)
6 public Integer getId() {
7 return id;
8 }
9 } 下面的代码说明Employee和EmployeeInfo是一对一关系Employee的主键列id作为外键指向EmployeeInfo的主键列INFO_ID。 1 Table(name Employee)
2 public class Employee {
3 OneToOne
4 PrimaryKeyJoinColumn(name id, referencedColumnNameINFO_ID)
5 EmployeeInfo info;
6 } PrimaryKeyJoinColumns 如果entity class使用了复合主键指定单个PrimaryKeyJoinColumn不能满足要求时可以用PrimaryKeyJoinColumns来定义多个PrimaryKeyJoinColumn。 元数据属性说明 value: 一个PrimaryKeyJoinColumn数组包含所有PrimaryKeyJoinColumn。下面的代码说明了Employee和EmployeeInfo是一对一关系。他们都使用复合主键建表时需要在Employee表建立一个外键从Employee的主键列id,name指向EmployeeInfo的主键列INFO_ID和INFO_NAME. 1 Entity2 IdClass(EmpPK.class)3 Table(name EMPLOYEE)4 public class Employee {5 6 private int id;7 8 private String name;9
10 private String address;
11
12 OneToOne(cascade CascadeType.ALL)
13 PrimaryKeyJoinColumns({
14 PrimaryKeyJoinColumn(nameid, referencedColumnNameINFO_ID),
15 PrimaryKeyJoinColumn(namename , referencedColumnNameINFO_NAME)})
16 EmployeeInfo info;
17 }
18
19 Entity
20 IdClass(EmpPK.class)
21 Table(name EMPLOYEE_INFO)
22 public class EmployeeInfo {
23
24 Id
25 Column(name INFO_ID)
26 private int id;
27
28 Id
29 Column(name INFO_NAME)
30 private String name;
31 } Transient Transient用来注释entity的属性指定的这些属性不会被持久化也不会为这些属性建表。 1 Transient
2 private String name; Version Version指定实体类在乐观事务中的version属性。在实体类重新由EntityManager管理并且加入到乐观事务中时保证完整性。每一个类只能有一个属性被指定为versionversion属性应该映射到实体类的主表上。 下面的代码说明versionNum属性作为这个类的version映射到数据库中主表的列名是OPTLOCK。 1 Version
2 Column(OPTLOCK)
3 protected int getVersionNum() { return versionNum; } Lob Lob指定一个属性作为数据库支持的大对象类型在数据库中存储。使用LobType这个枚举来定义Lob是二进制类型还是字符类型。 LobType枚举类型说明 BLOB 二进制大对象Byte[]或者Serializable的类型可以指定为BLOB。CLOB 字符型大对象char[]、Character[]或String类型可以指定为CLOB。元数据属性说明 fetch 定义这个字段是lazy loaded还是eagerly fetched。数据类型是FetchType枚举默认为LAZY,即lazy loaded.type 定义这个字段在数据库中的JDBC数据类型。数据类型是LobType枚举默认为BLOB。下面的代码定义了一个BLOB类型的属性和一个CLOB类型的属性。 1 Lob
2 Column(namePHOTO columnDefinitionBLOB NOT NULL)
3 protected JPEGImage picture;
4
5 Lob(fetchEAGER, typeCLOB)
6 Column(nameREPORT)
7 protected String report; JoinTable JoinTable在many-to-many关系的所有者一边定义。如果没有定义JoinTable使用JoinTable的默认值。 元数据属性说明 table:这个join table的Table定义。joinColumns:定义指向所有者主表的外键列数据类型是JoinColumn数组。inverseJoinColumns:定义指向非所有者主表的外键列数据类型是JoinColumn数组。下面的代码定义了一个连接表CUST和PHONE的join table。join table的表名是CUST_PHONE包含两个外键一个外键是CUST_ID指向表CUST的主键ID另一个外键是PHONE_ID指向表PHONE的主键ID。 1 JoinTable(
2 tableTable(nameCUST_PHONE),
3 joinColumnsJoinColumn(nameCUST_ID, referencedColumnNameID),
4 inverseJoinColumnsJoinColumn(namePHONE_ID, referencedColumnNameID)
5 ) TableGenerator TableGenerator定义一个主键值生成器在Id这个元数据的generateTABLE时generator属性中可以使用生成器的名字。生成器可以在类、方法或者属性上定义。 生成器是为多个实体类提供连续的ID值的表每一行为一个类提供ID值ID值通常是整数。 元数据属性说明 name:生成器的唯一名字可以被Id元数据使用。table:生成器用来存储id值的Table定义。pkColumnName:生成器表的主键名称。valueColumnName:生成器表的ID值的列名称。pkColumnValue:生成器表中的一行数据的主键值。initialValue:id值的初始值。allocationSize:id值的增量。下面的代码定义了两个生成器empGen和addressGen生成器的表是ID_GEN。 1 Entity public class Employee {2 ...3 TableGenerator(nameempGen,4 tableTable(nameID_GEN),5 pkColumnNameGEN_KEY,6 valueColumnNameGEN_VALUE,7 pkColumnValueEMP_ID,8 allocationSize1)9 Id(generateTABLE, generatorempGen)
10 public int id;
11 ...
12 }
13
14 Entity public class Address {
15 ...
16 TableGenerator(nameaddressGen,
17 tableTable(nameID_GEN),
18 pkColumnValueADDR_ID)
19 Id(generateTABLE, generatoraddressGen)
20 public int id;
21 ...
22 } SequenceGenerator SequenceGenerator定义一个主键值生成器在Id这个元数据的generator属性中可以使用生成器的名字。生成器可以在类、方法或者属性上定义。生成器是数据库支持的sequence对象。 元数据属性说明 name:生成器的唯一名字可以被Id元数据使用。sequenceName:数据库中sequence对象的名称。如果不指定会使用提供商指定的默认名称。initialValue:id值的初始值。allocationSize:id值的增量。下面的代码定义了一个使用提供商默认名称的sequence生成器。 1 SequenceGenerator(nameEMP_SEQ, allocationSize25) DiscriminatorColumn DiscriminatorColumn定义在使用SINGLE_TABLE或JOINED继承策略的表中区别不继承层次的列。 元数据属性说明 name:column的名字。默认值为TYPE。columnDefinition:生成DDL的sql片断。length:String类型的column的长度其他类型使用默认值10。下面的代码定义了一个列名为DISC长度为20的String类型的区别列。 1 Entity
2 Table(nameCUST)
3 Inheritance(strategySINGLE_TABLE,
4 discriminatorTypeSTRING,
5 discriminatorValueCUSTOMER)
6 DiscriminatorColumn(nameDISC, length20)
7 public class Customer { ... } 转载于:https://www.cnblogs.com/javaleon/p/4015001.html