package org.nutz.dao.entity.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 声明一条一对多映射,这个声明需要你输入三个参数,其中一个是可选的: * <ul> * <li><b>target</b>: 你的这个字段对应的实体类。通常,这个类得是你的字段的一个子类或者实现类。或者它能够顺利的通过 Nutz.castor * 转换成 你的字段 * <li><b>field</b>: 参考字段(<i>或者说是"关联字段"</i>)名,同 '@One' 不同,这个参考字段是 target 类中的字段。如果它为空串,则将映射目标实体全部记录 * <li><b>key</b>: <i>[可选]</i> 如果本注解声明在一个 Map 字段上,这个参数指明了你的 POJO 哪个字段可以作为 key * </ul> * * <h4 style=color:red>Can be Many:</h4> * <p> * <blockquote> 本注解是一个略微让人疑惑的名称,你可能会想,你声明 '@Many' 的字段必须是一个容器或者数组,其实,它也可以 * 是一个单个对象。 * <p> * 对于 Nutz.Dao来说,'@Many' 确切的意义是说: <b>Can be Many</b> <br> * 所以,你可以当然这么写: * * <pre> * @Many(target = Pet.class, field = "id") * private Pet pet; * </pre> * * </blockquote> * * @author zozoh(zozohtnt@gmail.com) */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD}) @Documented public @interface Many { /** * 关联类 */ Class<?> target(); /** * target类的关联属性名 */ String field(); /** * 一个属性名,缺省情况下,按参考字段名{@link #field()}的类型选取@Id或者@Name等主键字段 */ String key() default ""; }