package com.querydsl.apt.domain;
import static org.junit.Assert.assertEquals;
import java.util.List;
import javax.persistence.*;
import org.junit.Test;
import com.google.common.collect.Lists;
public class Generic12Test {
@Entity
@Inheritance
@DiscriminatorColumn(name = "CONTEXT")
public abstract static class Permission {
// some common stuff
}
@Entity
@DiscriminatorValue("CHANNEL")
public static class ChannelPermission extends Permission {
// CP specific stuff
}
@Entity
@DiscriminatorValue("SUBJECT")
public static class SubjectPermission extends Permission {
// SP specific stuff
}
// A bunch of role classes
@Entity
@Inheritance
@DiscriminatorColumn(name = "CONTEXT")
public abstract static class Role<T extends Permission> {
@ManyToMany(targetEntity = Permission.class)
private final List<T> permissions = Lists.newArrayList();
}
@Entity
@DiscriminatorValue("CHANNEL")
public static class ChannelRole extends Role<ChannelPermission> {
// some constructors
}
@Entity
@DiscriminatorValue("SUBJECT")
public static class SubjectRole extends Role { // missing type param, should be Role<SubjectPermission>
// some constructors
}
@Test
public void test() {
assertEquals(QGeneric12Test_Permission.class,
QGeneric12Test_ChannelRole.channelRole.permissions.get(0).getClass());
assertEquals(QGeneric12Test_Permission.class,
QGeneric12Test_SubjectRole.subjectRole.permissions.get(0).getClass());
}
}