2016-12-17 1 views
3

안녕하세요. 나는 CriteriaQuery 테이블에서 행을 선택하려고합니다. CriteriaQuery를 사용JPA CriteriaQuery : 개체 필드가 ​​매핑되지 않았습니다.

@Entity(name = "bank_cards") 
public class Card { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @ManyToMany(mappedBy = "cards") 
    private Set<Account> accounts; 

    private String number; 
    private float amount; 
    private String expire; 
    private String type; 

    public int getId() { 
    return id; 
    } 

    public void setId(int id) { 
    this.id = id; 
    } 

    public String getNumber() { 
    return number; 
    } 

    public void setNumber(String number) { 
    this.number = number; 
    } 

    public float getAmount() { 
    return amount; 
    } 

    public void setAmount(float amount) { 
    this.amount = amount; 
    } 

    public String getExpire() { 
    return expire; 
    } 

    public void setExpire(String expire) { 
    this.expire = expire; 
    } 

    public String getType() { 
    return type; 
    } 

    public void setType(String type) { 
    this.type = type; 
    } 

    public Set<Account> getAccounts() { 
    return accounts; 
    } 

    public void setAccounts(Set<Account> accounts) { 
    this.accounts = accounts; 
    } 
} 

선택 행 :

EntityManagerFactory emf = Persistence.createEntityManagerFactory("cards"); 
EntityManager em = emf.createEntityManager(); 
CriteriaBuilder cb = em.getCriteriaBuilder(); 

CriteriaQuery<Card> cq = cb.createQuery(Card.class); 
Metamodel m = em.getMetamodel(); 
EntityType<Card> Card_ = m.entity(Card.class); 

Root<Card> card = cq.from(Card.class); 
cq.where(card.get(Card_.number)); // error 

발견되지 마지막 문자열 필드 number에서

나는 객체 Card 있습니다.

의 persistence.xml에

링크 단위 :

"SELECT * FROM bank_cards WHERE number='" + cardNumber + "'" 

에 cardNumber - 문자열

메타 모델 클래스 : 나는 다음 쿼리를 실행해야

<persistence-unit name="users" transaction-type="RESOURCE_LOCAL"> 
    <class>main.java.entities.User</class> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/java" /> 
     <property name="javax.persistence.jdbc.user" value="java" /> 
     <property name="javax.persistence.jdbc.password" value="java" /> 

     <!-- EclipseLink should create the database schema automatically --> 
     <property name="eclipselink.ddl-generation" value="create-tables" /> 
     <property name="eclipselink.ddl-generation.output-mode" value="database" /> 
    </properties> 
    </persistence-unit> 

@StaticMetamodel(Card.class) 
public class Card_ { 
    public static volatile SingularAttribute<Card, Integer> id; 
    public static volatile SingularAttribute<Card, String> number; 
    public static volatile SingularAttribute<Card, String> expire; 
    public static volatile SingularAttribute<Card, String> type; 

    public static volatile SingularAttribute<Card, Float> amount; 

    public static volatile SetAttribute<Card, Account> accounts; 
} 
+0

메타 모델 Card_class (영문)를 보여주십시오. –

+0

@PaulWasilewski 위에 추가했습니다. – Evgeniy175

+0

오류 스택 트레이스? – jklee

답변

1

당신의 술어는 wro이다. ng.

public Card byNumber(String number) { 
    CriteriaBuilder cb = em.getCriteriaBuilder(); 
    CriteriaQuery<Card> cq = cb.createQuery(Card.class); 

    Root<Card> card = cq.from(Card.class); 
    Predicate equalPredicate = cb.equal(card.get(Card_.number), number); 
    cq.where(equalPredicate); 
    cq.select(card); 
    return em.createQuery(cq).getSingleResult(); 
} 
+0

에 마우스로 메시지를 찾을 수 없습니다. 네, 맞습니다! 고맙습니다! – Evgeniy175

+0

하지만 criteriaQuery : D가 아닙니다. 어쨌든 고맙습니다. – Evgeniy175

+0

100 % a criteriaQuery입니다. 왜 안돼? – jklee

관련 문제