package com.querydsl.apt.domain; import java.io.Serializable; import javax.persistence.*; import org.junit.Test; public class Generic9Test { @MappedSuperclass public abstract static class CommonOrganizationalUnit<T extends EntityLocalized, E extends TenantPreference, P extends CommonOrganizationalUnit<?, ?, ?>> extends LocalizableEntity<T> implements Serializable, Comparable<CommonOrganizationalUnit<T, E, P>> { P parent; // CommonOrganizationalUnit<?,?,?> parent2; // // CommonOrganizationalUnit<T,E,P> parent3; } @MappedSuperclass public abstract static class ProductionSurface<T extends EntityLocalized, E extends TenantPreference, P extends CommonOrganizationalUnit<?, ?, ?>> extends CommonOrganizationalUnit<T, E, P> implements Serializable { } // @Entity // public class Building extends ProductionSurface<BuildingLocalized, BuildingPreference, Site> { // // } @MappedSuperclass public abstract static class EntityLocalized extends CommonEntity { } @Entity public static class Preference { } @Entity @Table(name = "preference") @DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING) public abstract static class TenantPreference extends Preference { } @MappedSuperclass public abstract static class CommonEntity { } @MappedSuperclass public abstract static class LocalizableEntity<T extends EntityLocalized> extends CommonEntity { } @Test public void test() { new QGeneric9Test_CommonOrganizationalUnit("test"); } }