JPA 注解--源自技术

来源:互联网 发布:淘宝偏袒买家 编辑:程序博客网 时间:2024/05/01 01:23
 /*
  * 主键生成策略 
  *  不显示约定:主键值由程序控制。
  * AUTO:JPA自动选择合适的策略,是默认选项;
  * TABLE:通过表产生主键,框架借助由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植;
  *       不同的JPA实现商生成的表名是不同的,如OpenJPA生成openjpa_sequence_table表,
  *    Hibernate生成一个hibernate_sequences表,而TopLink则生成sequence表;
  *       这些表都具有一个序列名和对应值两个字段,如SEQ_NAME和SEQ_COUNT;可以使用以下方式指定表
  *    @TableGenerator(name = "test111", table = "IDTABLE",pkColumnName = "KEYID", valueColumnName = "KEYVALUE", pkColumnValue = "TestUSER_ID")
     *       @GeneratedValue(strategy=GenerationType.TABLE, generator="test111") 
  * IDENTITY:JPA 容器将使用数据库的自增长字段为新增加的实体对象赋唯一值。这种情况下需要数据库提供对自增长字段的支持,SQL Server、MySQL、DB2、Derby等支持,Oracle不支持。
  * SEQUENCE:表示使用数据库的序列号为新增加的实体对象赋唯一值。这种情况下需要数据库提供对序列号的支持常用的数据库中,Oracle支持。
  */
 
 /*
  * @Column:字段属性
  *  columnDefinition
  * 默认值:空 String 。
  * 默认情况下,JPA 使用最少量 SQL 创建一个数据库表列。
  * 如果需要使用更多指定选项创建的列,请将 columnDefinition 设置为在针对列生成DDL 时希望 JPA 使用的 SQL 片断。
  * 注意:捕获批注中的 DDL 信息时,某些 JPA 持续性提供程序可以在生成数据库模式时使用此 DDL 。例如,请参阅“ 用于 Java2DB 模式生成的 TopLink JPA 扩展” 。
  * insertable
  * 默认值: true 。
  * 默认情况下,JPA 持续性提供程序假设所有列始终包含在 SQL INSERT 语句中。
  * 如果该列不应包含在这些语句中,请将 insertable 设置为 false 。
  * length
  * 默认值: 255
  * 默认情况下,JPA 持续性提供程序假设所有列在用于保存 String 值时的最大长度为 255个字符。
  * 如果该列不适合于您的应用程序或数据库,请将 length 设置为适合于您的数据库列的int 值。
  * name
  * 默认值:JPA 持续性提供程序假设实体的每个持久字段都存储在其名称与持久字段或属性的名称相匹配的数据库表列中。
  * 要指定其他列名,请将 name 设置为所需的 String 列名。
  * nullable
  * 默认值: true 。
  * 默认情况下,JPA 持续性提供程序假设允许所有列包含空值。
  * 如果不允许该列包含空值,请将 nullable 设置为 false 。
  * precision
  * 默认值: 0.
  * 默认情况下,JPA 持续性提供程序假设所有列在用于保存十进制(精确数字)值时的精度为 0 。
  * 如果该精度不适合于您的应用程序或数据库,请将 precision 设置为相应的 int 精度。
  * scale
  * 默认值: 0.
  * 默认情况下,JPA 持续性提供程序假设所有列在用于保存十进制(精确数字)值时的伸缩度为 0 。
  * 如果该伸缩度不适合于您的应用程序或数据库,请将 scale 设置为相应的 int 精度。
  * table
  * 默认值:JPA 持续性提供程序假设实体的所有持久字段都存储到一个其名称为实体名称的数据库表中(请参阅 @Table )。
  * 如果该列与辅助表关联(请参阅 @SecondaryTable ),请将 name 设置为相应辅助表名称的 String 名称,如示例 1-8 所示。
  * unique
  * 默认值: false 。
  * 默认情况下,JPA 持续性提供程序假设允许所有列包含重复值。
  * 如果不允许该列包含重复值,请将 unique 设置为 true 。设置为 true 时,这相当于在表级别使用 @UniqueConstraint 。
  * updatable
  * 默认值: true 。
  * 默认情况下,JPA 持续性提供程序假设列始终包含在 SQL UPDATE 语句中。
  * 如果该列不应包含在这些语句中,请将 updatable 设置为 false 。
  * 
  */
 
 /*
  * @Transient
  * 用这个注解修饰的字段不进行数据持久化
  */
 
 /*
  * JPA对象关联
  * @OneToOne:一对一,在数据表中生成一列来维护数据
  * @OneToMany:一对多,生成一张中间表来管理关联关系,
  * @ManyToOne:一对多,可以不用注解修饰直接把Many端的bean做为集合属性放到One的bean中,默认在One的数据表中产生一列来维护关系。
  * @ManyToMany:多对多,生成一个中间表来管理关联关系
  *
  * mappedBy:只有在双向关联时,才会使用这个属性.指定关系维护规则,值为customer表示拥有mappedBy的bean是关系的管理者,
  *        被管理的表中生成到关联类的外键,mappedBy也可以指向关系被维护端对应的字段属性
  * optional:设置关系维护端的外键是否可以为空,true可以为空,false不能为空;
  * 
  * 级联规则
  *  CascadeType.REFRESH:当One端被refresh调用时候触发到Many端;
  *  CascadeType.PERSIST:当One端被persist调用时候触发到Many端;
  * CascadeType.MERGE:当One端被merge调用时候触发到Many端;
  * CascadeType.REMOVE:当One端被remove调用时候触发到Many端;
  * CascadeType.ALL:包含上面所有的级联关系;
  * 加载类型
  * FetchType.EAGER:立即加载;
  * FetchType.LAZY:延迟加载;
  */
 
 /* 
  *  @PrimaryKeyJoinColumn:
  *  主键关联:通过两个表中的主键来关联。
  *  关系被维护端id需要采用下面的形式:如果不采用这种形式无法保证两个关联实体的id一致。
  *  @Id
  *  @GeneratedValue(generator = "fk")
  *  @GenericGenerator(strategy = "foreign", name = "fk", parameters = @Parameter(name = "property", value = "关系维护端在被维护端Bean中的属性名称"))
  *  
  */
 
 /*
  *  @JoinTable(name="关联表名称", inverseJoinColumns=@JoinColumn(name="被维护端外键"),
  *  joinColumns=@JoinColumn(name="维护端外键"))
  */
 
 /*
  *  JPA 实体对象四种状态
  * 新建状态
  * 新建对象,通过persist方法(hibernate原先是save方法)保存到数据库;
  * 
  *  托管状态
  * 从数据库find出来的对象,通过set改变对象属性会同步回数据库;
  * 如果已经find出来的对象,被容器托管着,再次调用find方法是不会查数据库的,可以通过refresh方法去查询;
  * 
  * 游离状态
  * 从数据库find出来的对象,中间被EntityManager的clear方法清理后,此时变成游离状态;
  * 对游离状态的set改变属性是不会同步至数据库的;
  * 可以通过merge方法来将游离状态对象更新回数据库;
  * 
  * 删除状态
  * 托管状态的对象,调用remove方法删除数据库记录;
  *
  */
0 0