可以说我们有一个带有JPA注释的类,其属性类型为List。该代码当前工作正常。
@Entity
public class Family {
...
@CollectionOfElements(targetElement=java.lang.String.class)
@JoinTable(name = "elements_family",
joinColumns = @JoinColumn(name = "idFamily")
)
@Column(name = "element", nullable = false)
private List<String> elements;
...
}
有没有办法查询包含元素“ yyy”的家庭列表?也就是说,类似:
Query query = getEntityManager().createQuery("select f FROM Family f WHERE element = :element");
query.setParameter("element", "yyy");
return query.getResultList();
请注意,您正在使用特定于Hibernate的功能CollectionOfElements。这不是严格的JPA。您可以使用HQL特定elements
功能执行此操作:
select f from Family f WHERE :element in elements(f.elements)
这是一个工作示例:
import org.hibernate.annotations.CollectionOfElements;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Persistence;
import javax.persistence.Query;
import java.util.Arrays;
import java.util.List;
@Entity
public class Family {
@Id
int id;
String name;
@CollectionOfElements(targetElement = java.lang.String.class)
@JoinTable(name = "elements_family",
joinColumns = @JoinColumn(name = "idFamily")
)
@Column(name = "element", nullable = false)
public List<String> elements;
public static void main(String[] args) throws Exception {
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("mysql");
EntityManager em = emf.createEntityManager();
try {
Family f1 = new Family();
f1.id = 1;
f1.name = "Happy";
f1.elements = Arrays.asList("foo", "bar", "yyy", "zzz");
Family f2 = new Family();
f1.id = 2;
f2.name = "Disfunctional";
f2.elements = Arrays.asList("foo", "bar", "yyy", "xxx");
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(f1);
em.persist(f2);
tx.commit();
Query query = em.createQuery(
"select f from Family f WHERE :element in elements(f.elements)");
query.setParameter("element", "bar");
List list = query.getResultList();
assert list.size() == 2;
} finally {
em.close();
emf.close();
}
}
}
为了完整起见,persistence.xml
<persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL">
<class>jpa.Family</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/test"/>
<property name="hibernate.connection.username" value="test"/>
<property name="hibernate.connection.password" value="test"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.bytecode.use_reflection_optimizer" value="true"/>
<property name="hibernate.archive.autodetection" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.generate_statistics" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
我很难启动服务器,因为它抱怨在查询中找不到继承的属性。 我的问题是,既然我试图将它移动到继承模型(联接),我如何在带注释的查询中引用继承的属性? (注意,该属性是私有可见性,在BaseContent中使用public getter/setter) 谢谢。
我有一个使用Postgre 9.3和JPA2.1(Hibernate实现)的Spring MVC应用程序。我有一个类'电影',其中有一组评论。我想写一个JPA NamedQuery,它返回我所有的电影细节,但只有批准的评论。评论可以有其他状态,但我想只显示批准的评论。 我的班级如下所示: 我写的查询不会过滤评论并返回包含所有评论的电影;它的工作原理与上面显示的findMovieById查询相同。
显然,扩展了,是抽象的,继承是, 和 具有 其他原因 。 但生成的SQL是这样的: 在我期待的时候: 请注意 使用另一根- 使用子查询- 将lastName字段上移到主题 使用本机查询 使用实体图 是不能接受的。 我感兴趣的是可以在WHERE子句中直接声明和使用的东西(仅从CriteriaBuilder和/或单个Root生成,就像子句一样)(如果确实存在的话)。
我试图建立一个查询,但我得到一个错误,当我参数的id.我不明白为什么。 这是针对Java8Spring数据JPA1.11.23的。释放 错误 16:02:45103错误DaoImpl:528-您试图设置java类类型的值。util。参数1的ArrayList应为java类的类型。从查询字符串中选择x,其中x.id在(?1)中。 java.lang.IllegalArgumentExcture:您试
(我是mongo新手) 如何查询不属于ObjectId类型的_id? 我mongorestore了一个mongodump,但无法根据id字段得到任何结果。过了一会儿,我注意到集合中的记录不符合ObjectID类型。 _id:7409a2ab-322e-40f3-b991-c3ebeda78f61 如果我将id更改为,那么我的查询将正常工作,因为它与ObjectID类型匹配。 我只是不断得到<cod
问题内容: 嗨,我正在使用hibernate和Mysql。我有一个带有布尔属性的类,称为“活动”。 生成的数据库表具有BIT数据类型。到目前为止,一切都很好。我想查询该值,但我不知道该怎么做。我试过了 不起作用,以下都不起作用 我在参考手册和Stackoveflow中都找不到任何东西。 有什么提示吗? 提前致谢! 问题答案: