package com.querydsl.apt.domain;
import javax.persistence.*;
import org.hibernate.annotations.NaturalId;
import org.junit.Assert;
import org.junit.Test;
public class InterfaceType2Test {
public interface IEntity {
Long getId();
}
public interface User extends IEntity {
Party getParty();
String getUsername();
}
public interface Party extends IEntity {
String getName();
}
@MappedSuperclass
public static class EntityImpl {
@Id
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
@Entity
@Table(name = "USERS")
@org.hibernate.annotations.AccessType("field")
@org.hibernate.annotations.Proxy(proxyClass = User.class)
public static class UserImpl extends EntityImpl implements User {
@NaturalId(mutable = true)
@Column(name = "USERNAME", nullable = false)
private String username;
@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER, targetEntity = PartyImpl.class)
@JoinColumn(name = "PARTY_ID", nullable = false)
private Party party;
@Override
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public Party getParty() {
return party;
}
public void setParty(Party party) {
this.party = party;
}
}
@javax.persistence.Entity
@Table(name = "PARTY")
@org.hibernate.annotations.AccessType("field")
@org.hibernate.annotations.Proxy(proxyClass = Party.class)
public abstract static class PartyImpl extends EntityImpl implements Party {
@Column(name = "NAME", nullable = false)
private String name;
@Override
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Test
public void test() {
Assert.assertEquals(
QInterfaceType2Test_PartyImpl.class,
QInterfaceType2Test_UserImpl.userImpl.party.getClass());
}
}