java - JPA 条件查询 : fields of the object doesn't mapped

标签 java jpa

美好的一天。我尝试使用 CriteriaQuery 从表中选择行。

我有一个对象Card:

@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;
  }
}

使用 CriteriaQuery 选择行:

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 未找到。

persistence.xml 中的链接单元:

<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>

我需要执行下一个查询:

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

cardNumber - 字符串

元模型类:

@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;
}

最佳答案

你的谓词是错误的。

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();
}

关于java - JPA 条件查询 : fields of the object doesn't mapped,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41197232/

相关文章:

java - 无法持久化实体(单向多对一关系)

java - Google App Engine 上的 JDO 与 JPA for Java

java - JPA + EJB : Transactions with Native Queries

java - 无法从 Servlet 检索数据

java - 具有时区和 SimpleDateFormat 的不可解析日期

Java jar - 没有主要 list 属性

java - 如何使用 Hibernate 和 Spring Boot 启用批量插入

Linux 上的 Java File.toURI() 问题

java - 我可以将数组复制到哈希表吗?

mysql - 为什么超出max_allowed_pa​​cket?是由于 hibernate 或CP迁移引起的吗​​?