栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何查询列表类型的属性在JPA中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何查询列表类型的属性在JPA中

请注意,您正在使用特定于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.bytepre.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>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号