2014-04-09 4 views
0

나는 게으른로드하도록 주석을 달았습니다 (metadataTemplate에 creationTimestamp가 있습니다). 아니요, 하나의 엔티티가 열심히로드해야합니다. 나는 성공하지 않고 그래프를 가져 와서 그것을 시도했다. 쿼리에서 FETCH하는 데 사용할 수있는 기능과 같은 JOIN FETCH가 있습니까?JPA 2.1 Eager 가져 오기 속성

번들링 된 최대 절전 모드와 함께 Wildfly를 사용하고 있습니다.

가져 오기 그래프로 가져 오려고하면 최대 절전 모드에서 ID 필드를 찾을 수 없다는 예외가 발생합니다. 이 필드는 엔티티베이스 (보호됨)에 있습니다.

@NamedQueries({ @NamedQuery(name = ChatMessage.FIND_BY_CHAT_TIME, query = "SELECT m FROM ChatMessage m " 
     + "WHERE m.chat=:chat " 
     + "AND m.creationTimestamp > :index ORDER BY m.creationTimestamp") }) 
@NamedEntityGraph(
     name = ChatMessage.GRAPH_FETCH_ALL, 
     attributeNodes = {@NamedAttributeNode("id"), @NamedAttributeNode("player"), @NamedAttributeNode("text"), @NamedAttributeNode("creationTimestamp")} 
    ) 
public class ChatMessage extends EntityBase { 

@MappedSuperclass 
public abstract class EntityBase extends MetaData { 
    private static final long serialVersionUID = -5579667581450362176L; 

    public static final String FETCH_GRAPH_HINT = "javax.persistence.fetchgraph"; 

    @Id 
    @Column(length = 36) 
    protected String id = java.util.UUID.randomUUID().toString(); 

@MappedSuperclass 
public class MetaData implements Serializable { 
    private static final long serialVersionUID = 8870539357817188030L; 

    @Version 
    private long version; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(nullable = false, updatable = false) 
    @Basic(fetch=FetchType.LAZY) 
    protected Calendar creationTimestamp; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(nullable = false) 
    @Basic(fetch=FetchType.LAZY) 
    private Calendar updateTimestamp; 

이 예외에 리드 : 조인을 인출과 같은 속성을 가져올 수있는 방법이

Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [id] on this ManagedType [ChatMessage] 
    at org.hibernate.jpa.internal.metamodel.AbstractManagedType.checkNotNull(AbstractManagedType.java:144) 
    at org.hibernate.jpa.internal.metamodel.AbstractManagedType.getDeclaredAttribute(AbstractManagedType.java:137) 
    at org.hibernate.jpa.graph.internal.EntityGraphImpl.resolveAttribute(EntityGraphImpl.java:139) 
    at org.hibernate.jpa.graph.internal.AbstractGraphNode.buildAttributeNode(AbstractGraphNode.java:119) 
    at org.hibernate.jpa.graph.internal.AbstractGraphNode.addAttribute(AbstractGraphNode.java:114) 
    at org.hibernate.jpa.internal.EntityManagerFactoryImpl.applyNamedAttributeNodes(EntityManagerFactoryImpl.java:279) 
    at org.hibernate.jpa.internal.EntityManagerFactoryImpl.applyNamedEntityGraphs(EntityManagerFactoryImpl.java:266) 
    at org.hibernate.jpa.internal.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:173) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:865) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) 
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:73) 

있습니까? 아니면 다른 방법으로 가져 오기 그래프를 참조해야합니까?

안부, 서브 클래스의 특성이 다른 방식으로 참조해야처럼

답변

1

이 보이는 m :

@NamedEntityGraph(
     name = ChatMessage.GRAPH_FETCH_ALL, 
     attributeNodes = {@NamedAttributeNode("player"), @NamedAttributeNode("text")} 
     , subgraphs={@NamedSubgraph(name="MetaData.subgraph", attributeNodes={@NamedAttributeNode("id"), @NamedAttributeNode("creationTimestamp")})} 
    ) 
관련 문제