package com.querydsl.apt.domain; import static org.junit.Assert.assertNotNull; import javax.persistence.Entity; import javax.persistence.MappedSuperclass; import javax.persistence.OneToOne; import org.junit.Test; public class Generic10Test extends AbstractTest { public interface Tradable { } public interface Market<T extends Tradable> { } @Entity public static class FutureTrade implements Tradable { } @MappedSuperclass public abstract static class AbstractTradingMarket<T extends Tradable> implements Market<T> { @OneToOne private TradingMarketLedger<AbstractTradingMarket<T>> ledger; } @Entity public abstract static class AbstractFuturesMarket extends AbstractTradingMarket<FutureTrade> { } @Entity public static class CommonFuturesMarket extends AbstractFuturesMarket { } @Entity public static class TradingMarketLedger<M extends Market<? extends Tradable>> { } @Test public void test() { assertNotNull(QGeneric10Test_FutureTrade.futureTrade); start(QGeneric10Test_AbstractTradingMarket.class, QGeneric10Test_AbstractTradingMarket.abstractTradingMarket); assertPresent("ledger"); start(QGeneric10Test_AbstractFuturesMarket.class, QGeneric10Test_AbstractFuturesMarket.abstractFuturesMarket); assertPresent("ledger"); start(QGeneric10Test_CommonFuturesMarket.class, QGeneric10Test_CommonFuturesMarket.commonFuturesMarket); assertPresent("ledger"); start(QGeneric10Test_TradingMarketLedger.class, QGeneric10Test_TradingMarketLedger.tradingMarketLedger); } }