mirror of
https://github.com/querydsl/querydsl.git
synced 2026-07-03 21:07:49 +08:00
Improve targetEntity handling #675
This commit is contained in:
parent
d15fb64eb5
commit
8fcb7448b2
@ -24,6 +24,7 @@ import javax.lang.model.element.ElementKind;
|
||||
import javax.lang.model.element.ExecutableElement;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
import javax.lang.model.element.VariableElement;
|
||||
import javax.lang.model.type.DeclaredType;
|
||||
import javax.lang.model.type.TypeMirror;
|
||||
import javax.lang.model.util.Types;
|
||||
import javax.persistence.Access;
|
||||
@ -138,7 +139,14 @@ public class JPAConfiguration extends DefaultConfiguration {
|
||||
TypeMirror erasure = types.erasure(element.asType());
|
||||
TypeElement typeElement = (TypeElement) types.asElement(erasure);
|
||||
if (typeElement != null && typeArg != null) {
|
||||
return types.getDeclaredType(typeElement, typeArg);
|
||||
if (typeElement.getTypeParameters().size() == 1) {
|
||||
return types.getDeclaredType(typeElement, typeArg);
|
||||
} else if (typeElement.getTypeParameters().size() == 2) {
|
||||
if (element.asType() instanceof DeclaredType) {
|
||||
TypeMirror first = ((DeclaredType)element.asType()).getTypeArguments().get(0);
|
||||
return types.getDeclaredType(typeElement, first, typeArg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -93,6 +93,7 @@ public class GenericExporterTest extends AbstractProcessorTest {
|
||||
expected.add("QGeneric4Test_HidaBezGruppe.java");
|
||||
expected.add("QInterfaceType2Test_UserImpl.java");
|
||||
expected.add("QOrderTest_Order.java");
|
||||
expected.add("QManagedEmailTest_ManagedEmails.java");
|
||||
|
||||
execute(expected, "GenericExporterTest2", "HibernateAnnotationProcessor");
|
||||
}
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
package com.mysema.query.domain;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.MapKey;
|
||||
import javax.persistence.OneToMany;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class ManagedEmailTest {
|
||||
|
||||
public interface ManagedEmail {
|
||||
|
||||
}
|
||||
|
||||
public enum EmailType { WORK, HOME }
|
||||
|
||||
@Entity
|
||||
public static class ManagedEmailImpl implements ManagedEmail {
|
||||
|
||||
}
|
||||
|
||||
@Entity
|
||||
public static class ManagedEmails {
|
||||
|
||||
@OneToMany(targetEntity = ManagedEmailImpl.class)
|
||||
@MapKey(name = "emailType")
|
||||
private Map<EmailType, ManagedEmail> emails;
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
assertEquals(EmailType.class, QManagedEmailTest_ManagedEmails.managedEmails.emails.getKeyType());
|
||||
assertEquals(ManagedEmailImpl.class, QManagedEmailTest_ManagedEmails.managedEmails.emails.getValueType());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user