package com.querydsl.apt.domain;
import static org.junit.Assert.assertNotNull;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.MappedSuperclass;
import org.junit.Test;
public class Generic14Test extends AbstractTest {
@Entity
public static class UserAccount extends BaseReferencablePersistable<UserAccount, Long> {
public UserAccount() {
super(UserAccount.class);
}
}
@MappedSuperclass
public abstract static class BaseReferencablePersistable<T, PK extends Serializable> extends BasePersistable<PK> {
private Class<T> entityClass;
public BaseReferencablePersistable(Class<T> entityClass) {
this.entityClass = entityClass;
}
}
@MappedSuperclass
public static class BasePersistable<T extends Serializable> extends AbstractPersistable<T> implements UpdateInfo {
private T id;
@Override
public T getId() {
return id;
}
}
@MappedSuperclass
public abstract static class AbstractPersistable<PK extends Serializable> implements Persistable<PK> {
}
public interface Persistable<T> {
T getId();
}
public interface UpdateInfo {
}
@Test
public void test() throws IllegalAccessException, NoSuchFieldException {
assertNotNull(QGeneric14Test_AbstractPersistable.abstractPersistable);
start(QGeneric14Test_BasePersistable.class, QGeneric14Test_BasePersistable.basePersistable);
matchType(Serializable.class, "id");
start(QGeneric14Test_BaseReferencablePersistable.class, QGeneric14Test_BaseReferencablePersistable.baseReferencablePersistable);
matchType(Class.class, "entityClass");
matchType(Serializable.class, "id");
start(QGeneric14Test_UserAccount.class, QGeneric14Test_UserAccount.userAccount);
matchType(Long.class, "id");
}
}