微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javax.persistence.Inheritance的实例源码

项目:org.fastnate    文件EntityClass.java   
/**
 * Determine the inheritance type and discriminator properties.
 */
private void buildInheritance() {
    // Check,if we've got an explicit inheritance type
    final Inheritance inheritance = this.entityClass.getAnnotation(Inheritance.class);
    if (inheritance != null) {
        this.inheritanceType = inheritance.strategy();
    }

    // Find the root of our hierarchy
    this.hierarchyRoot = this;
    findHierarchyRoot(this.entityClass.getSuperclass());

    // We scan only classes that we are about to write
    // So we don't kNow,that there is a subclass entity - until we find one
    // This Could be to late for InheritanceType.SINGLE_TABLE - the defaault type
    // That's why we build a discriminator,if one of the inheritance annotations exists
    if (this.inheritanceType == null && this.entityClass.isAnnotationPresent(discriminatorColumn.class)
            || this.entityClass.isAnnotationPresent(discriminatorValue.class)) {
        this.inheritanceType = InheritanceType.SINGLE_TABLE;
    }

    builddiscriminator();
}
项目:lams    文件InheritanceState.java   
private void extractInheritanceType() {
    XAnnotatedElement element = getClazz();
    Inheritance inhAnn = element.getAnnotation( Inheritance.class );
    MappedSuperclass mappedSuperClass = element.getAnnotation( MappedSuperclass.class );
    if ( mappedSuperClass != null ) {
        setEmbeddableSuperclass( true );
        setType( inhAnn == null ? null : inhAnn.strategy() );
    }
    else {
        setType( inhAnn == null ? InheritanceType.SINGLE_TABLE : inhAnn.strategy() );
    }
}
项目:lams    文件JPAOverriddenAnnotationReader.java   
private Inheritance getInheritance(Element tree,XMLContext.Default defaults) {
    Element element = tree != null ? tree.element( "inheritance" ) : null;
    if ( element != null ) {
        AnnotationDescriptor ad = new AnnotationDescriptor( Inheritance.class );
        Attribute attr = element.attribute( "strategy" );
        InheritanceType strategy = InheritanceType.SINGLE_TABLE;
        if ( attr != null ) {
            String value = attr.getValue();
            if ( "SINGLE_TABLE".equals( value ) ) {
                strategy = InheritanceType.SINGLE_TABLE;
            }
            else if ( "JOINED".equals( value ) ) {
                strategy = InheritanceType.JOINED;
            }
            else if ( "TABLE_PER_CLASS".equals( value ) ) {
                strategy = InheritanceType.TABLE_PER_CLASS;
            }
            else {
                throw new AnnotationException(
                        "UnkNown InheritanceType in XML: " + value + " (" + SCHEMA_VALIDATION + ")"
                );
            }
        }
        ad.setValue( "strategy",strategy );
        return AnnotationFactory.create( ad );
    }
    else if ( defaults.canUseJavaAnnotations() ) {
        return getPhysicalAnnotation( Inheritance.class );
    }
    else {
        return null;
    }
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetEntityClassFromNodeLabelsHavingTheLabelDeclaredByTheClassNameWithSingleTableInheritance() throws Exception {
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameA = "SubEntityClassA";
    final String simpleClassNameB = "SubEntityClassB";

    final JPackage jp = jcodemodel.rootPackage();
    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,simpleClassNameBase);
    jbaseClass.annotate(Entity.class);
    jbaseClass.annotate(Inheritance.class).param("strategy",InheritanceType.SINGLE_TABLE);
    jbaseClass.annotate(discriminatorColumn.class).param("name","TYPE");

    final JDefinedClass jSubclassA = jp._class(JMod.PUBLIC,simpleClassNameA)._extends(jbaseClass);
    jSubclassA.annotate(Entity.class);
    jSubclassA.annotate(discriminatorValue.class).param("value","A");

    final JDefinedClass jSubclassB = jp._class(JMod.PUBLIC,simpleClassNameB)._extends(jbaseClass);
    jSubclassB.annotate(Entity.class);
    jSubclassB.annotate(discriminatorValue.class).param("value","B");

    buildModel(testFolder.getRoot(),jcodemodel);

    compileModel(testFolder.getRoot());

    final Class<?> baseClass = loadClass(testFolder.getRoot(),jbaseClass.name());
    final Class<?> subClassA = loadClass(testFolder.getRoot(),jSubclassA.name());
    final Class<?> subClassB = loadClass(testFolder.getRoot(),jSubclassB.name());

    final Class<?> clazz = EntityUtils.getEntityClassFromNodeLabels(Arrays.asList(simpleClassNameBase),Arrays.asList(baseClass,subClassA,subClassB));

    assertthat(clazz,equalTo(baseClass));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetEntityClassFromNodeLabelsHavingTheLabelDeclaredByTheTableAnnotationWithSingleTableInheritance() throws Exception {
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameA = "SubEntityClassA";
    final String simpleClassNameB = "SubEntityClassB";

    final String nodeLabel = "ENTITY_CLASS";

    final JPackage jp = jcodemodel.rootPackage();
    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,simpleClassNameBase);
    jbaseClass.annotate(Entity.class);
    jbaseClass.annotate(Table.class).param("name",nodeLabel);
    jbaseClass.annotate(Inheritance.class).param("strategy",jSubclassB.name());

    final Class<?> clazz = EntityUtils.getEntityClassFromNodeLabels(Arrays.asList(nodeLabel),equalTo(baseClass));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetEntityClassFromNodeLabelsHavingTheLabelDeclaredByTheClassNameWithTablePerClassInheritance() throws Exception {
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameA = "SubEntityClassA";
    final String simpleClassNameB = "SubEntityClassB";

    final JPackage jp = jcodemodel.rootPackage();
    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,InheritanceType.TABLE_PER_CLASS);

    final JDefinedClass jSubclassA = jp._class(JMod.PUBLIC,simpleClassNameA)._extends(jbaseClass);
    jSubclassA.annotate(Entity.class);

    final JDefinedClass jSubclassB = jp._class(JMod.PUBLIC,simpleClassNameB)._extends(jbaseClass);
    jSubclassB.annotate(Entity.class);

    buildModel(testFolder.getRoot(),jSubclassB.name());

    final Class<?> clazz = EntityUtils.getEntityClassFromNodeLabels(Arrays.asList(simpleClassNameB),equalTo(subClassB));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetEntityClassFromNodeLabelsHavingTheLabelDeclaredByTheTableAnnotationWithTablePerClassInheritance() throws Exception {
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameA = "SubEntityClassA";
    final String simpleClassNameB = "SubEntityClassB";

    final String nodeLabelBase = "ENTITY_CLASS";
    final String nodeLabelA = "ENTITY_CLASS_A";
    final String nodeLabelB = "ENTITY_CLASS_B";

    final JPackage jp = jcodemodel.rootPackage();
    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,nodeLabelBase);
    jbaseClass.annotate(Inheritance.class).param("strategy",simpleClassNameA)._extends(jbaseClass);
    jSubclassA.annotate(Entity.class);
    jSubclassA.annotate(Table.class).param("name",nodeLabelA);

    final JDefinedClass jSubclassB = jp._class(JMod.PUBLIC,simpleClassNameB)._extends(jbaseClass);
    jSubclassB.annotate(Entity.class);
    jSubclassB.annotate(Table.class).param("name",nodeLabelB);

    buildModel(testFolder.getRoot(),jSubclassB.name());

    final Class<?> clazz = EntityUtils.getEntityClassFromNodeLabels(Arrays.asList(nodeLabelA),equalTo(subClassA));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetEntityClassFromNodeLabelsHavingTheLabelDeclaredByTheClassNameWithJoinedInheritance() throws Exception {
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameA = "SubEntityClassA";
    final String simpleClassNameB = "SubEntityClassB";

    final JPackage jp = jcodemodel.rootPackage();
    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,InheritanceType.JOINED);

    final JDefinedClass jSubclassA = jp._class(JMod.PUBLIC,equalTo(subClassB));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetEntityClassFromNodeLabelsHavingTheLabelDeclaredByTheTableAnnotationWithJoinedInheritance() throws Exception {
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameA = "SubEntityClassA";
    final String simpleClassNameB = "SubEntityClassB";

    final String nodeLabelBase = "ENTITY_CLASS";
    final String nodeLabelA = "ENTITY_CLASS_A";
    final String nodeLabelB = "ENTITY_CLASS_B";

    final JPackage jp = jcodemodel.rootPackage();
    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,equalTo(subClassA));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetNamesOfIdPropertiesFromAClassHierarchyHavingAFieldAnnotatedWithId() throws Exception {
    // GIVEN
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameB = "SubEntityClass";
    final String idPropertyName = "key";

    final JPackage jp = jcodemodel.rootPackage();
    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,InheritanceType.TABLE_PER_CLASS);
    jbaseClass.field(JMod.PRIVATE,String.class,idPropertyName).annotate(Id.class);

    final JDefinedClass jSubclass = jp._class(JMod.PUBLIC,simpleClassNameB)._extends(jbaseClass);
    jSubclass.annotate(Entity.class);

    buildModel(testFolder.getRoot(),jcodemodel);

    compileModel(testFolder.getRoot());

    final Class<?> subClass = loadClass(testFolder.getRoot(),jSubclass.name());

    // WHEN
    final List<String> namesOfIdProperties = EntityUtils.getNamesOfIdProperties(subClass);

    // THEN
    assertthat(namesOfIdProperties.size(),equalTo(1));
    assertthat(namesOfIdProperties,hasItem(idPropertyName));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetNamesOfIdPropertiesFromAClassHierarchyHavingAMethodAnnotatedWithId() throws Exception {
    // GIVEN
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameB = "SubEntityClass";
    final String idPropertyName = "key";

    final JPackage jp = jcodemodel.rootPackage();
    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,InheritanceType.TABLE_PER_CLASS);
    jbaseClass.method(JMod.PUBLIC,jcodemodel.VOID,"getKey").annotate(Id.class);

    final JDefinedClass jSubclass = jp._class(JMod.PUBLIC,hasItem(idPropertyName));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetNamesOfIdPropertiesFromAClassHierarchyHavingAFieldAnnotatedWithEmbeddedId() throws Exception {
    // GIVEN
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameB = "SubEntityClass";
    final String compositeIdPropertyName = "compositeKey";
    final String id1PropertyName = "key1";
    final String id2PropertyName = "key2";

    final JPackage jp = jcodemodel.rootPackage();

    final JDefinedClass jIdTypeClass = jp._class(JMod.PUBLIC,"IdType");
    jIdTypeClass.annotate(Embeddable.class);
    jIdTypeClass.field(JMod.PRIVATE,Integer.class,id1PropertyName);
    jIdTypeClass.field(JMod.PRIVATE,id2PropertyName);

    final JDefinedClass jbaseClass = jp._class(JMod.PUBLIC,jIdTypeClass,compositeIdPropertyName).annotate(EmbeddedId.class);

    final JDefinedClass jSubclass = jp._class(JMod.PUBLIC,jcodemodel);

    compileModel(testFolder.getRoot());

    final Class<?> entityClass = loadClass(testFolder.getRoot(),jSubclass.name());

    // WHEN
    final List<String> namesOfIdProperties = EntityUtils.getNamesOfIdProperties(entityClass);

    // THEN
    assertthat(namesOfIdProperties.size(),equalTo(2));
    assertthat(namesOfIdProperties,hasItems(compositeIdPropertyName + "." + id1PropertyName,compositeIdPropertyName + "." + id2PropertyName));
}
项目:jpa-unit    文件EntityUtilsTest.java   
@Test
public void testGetNamesOfIdPropertiesFromAClassHierarchyHavingAMethodAnnotatedWithEmbeddedId() throws Exception {
    // GIVEN
    final String simpleClassNameBase = "EntityClass";
    final String simpleClassNameB = "SubEntityClass";
    final String compositeIdPropertyName = "compositeKey";
    final String id1PropertyName = "key1";
    final String id2PropertyName = "key2";

    final JPackage jp = jcodemodel.rootPackage();

    final JDefinedClass jIdTypeClass = jp._class(JMod.PUBLIC,InheritanceType.TABLE_PER_CLASS);
    final JMethod method = jbaseClass.method(JMod.PUBLIC,"getCompositeKey");
    method.annotate(EmbeddedId.class);
    method.body()._return(JExpr._null());

    final JDefinedClass jSubclass = jp._class(JMod.PUBLIC,compositeIdPropertyName + "." + id2PropertyName));
}
项目:cuba    文件Metadataimpl.java   
protected String getEntityNameForIdGeneration(MetaClass MetaClass) {
    MetaClass result = MetaClass.getAncestors().stream()
            .filter(mc -> {
                // use root of inheritance tree if the strategy is JOINED because ID is stored in the root table
                Class<?> javaClass = mc.getJavaClass();
                Inheritance inheritance = javaClass.getAnnotation(Inheritance.class);
                return inheritance != null && inheritance.strategy() == InheritanceType.JOINED;
            })
            .findFirst()
            .orElse(MetaClass);
    return result.getName();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。