package org.nutz.dao.entity.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 声明了一个 POJO 的主键。 * <p> * 本注解声明在某一个 POJO 类上,例如: * * <pre> * @Table("t_abc") * @PK({"id", "type"}) * public class Abc{ * ... * </pre> * * 其中, "id" 和 "type" 必须是这个 POJO 的 Java 字段名 * * <p> * 这个注解主要应用在复合主键的情况,如果一个 POJO 是复合主键的话,你需要通过 * <ul> * <li>fetchx(Class<?>,Object ...) 来获取一个对象 * <li>deletex(Class<?>,Object ...) 来删除一个对象 * </ul> * 变参给入的顺序,需要按照本注解声明的顺序,否则会发生不可预知的错误。 * <p> * 当然,你可以通过这个注解来替代 '@Id' 和 '@Name',当你给出的字段只有一个的时候 * <ul> * <li>整数型字段,将代表 '@Id' * <li>字符型字段,将代表 '@Name' * </ul> * 在 POJO 中,你可以同时声明 '@Id','@Name'以及 '@Pk',但是 '@Id' 和 '@Name' 更优先 * * @author zozoh(zozohtnt@gmail.com) * * @see org.nutz.dao.Dao */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) @Documented public @interface PK { String[] value(); /** * 仅建表时使用 */ String name() default ""; }