Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何查询复合主键的子集?_Hibernate_Spring Data Jpa - Fatal编程技术网

Hibernate 如何查询复合主键的子集?

Hibernate 如何查询复合主键的子集?,hibernate,spring-data-jpa,Hibernate,Spring Data Jpa,我有以下课程: @Entity @Table(name = "my_entity") @JsonIgnoreProperties(ignoreUnknown = true) public class MyEntity { @EmbeddedId private Pk id; public Pk getId() { return id; } public void setId(Pk id) { this.id = id;

我有以下课程:

@Entity
@Table(name = "my_entity")
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyEntity {
    @EmbeddedId
    private Pk id;

    public Pk getId() {
        return id;
    }

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

}

@Embeddable
public class Pk implements Serializable {
    private static final long serialVersionUID = -3090221844117493661L;
    private Integer type;
    private String userId;

    public Pk() {
    }

    public Pk(String userId, Integer type) {
        this.setUserId(userId);
        this.setType(type);
    }

    public Integer getType() {
        return type;
    }

    public String getUserId() {
        return userId;
    }

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

    public void setUserId(String userId) {
        this.userId = userId;
    }

    // Auto-generated by Eclipse.
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((type == null) ? 0 : type.hashCode());
        result = prime * result + ((userId == null) ? 0 : userId.hashCode());
        return result;
    }

    // Auto-generated by Eclipse.
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Pk other = (Pk) obj;
        if (type != other.type)
            return false;
        if (userId == null) {
            if (other.userId != null)
                return false;
        } else if (!userId.equals(other.userId))
            return false;
        return true;
    }

}

public interface MyEntityRepository extends JpaRepository<MyEntity, Pk> {

    List<MyEntity> findAllByUserId(String userId);

}
@实体
@表(name=“我的实体”)
@JsonIgnoreProperties(ignoreUnknown=true)
公共类MyEntity{
@嵌入ID
私有pkid;
公共Pk getId(){
返回id;
}
公共无效设置id(主键id){
this.id=id;
}
}
@可嵌入
公共类Pk实现可序列化{
私有静态最终长serialVersionUID=-309021844117493661L;
私有整数类型;
私有字符串用户标识;
公共Pk(){
}
公共主键(字符串用户ID,整数类型){
this.setUserId(userId);
这个.setType(type);
}
公共整数getType(){
返回类型;
}
公共字符串getUserId(){
返回用户标识;
}
公共void集合类型(整数类型){
this.type=type;
}
public void setUserId(字符串userId){
this.userId=userId;
}
//由Eclipse自动生成。
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
result=prime*result+((type==null)?0:type.hashCode();
result=prime*result+((userId==null)?0:userId.hashCode();
返回结果;
}
//由Eclipse自动生成。
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
Pk其他=(Pk)obj;
if(type!=其他.type)
返回false;
if(userId==null){
if(other.userId!=null)
返回false;
}如果(!userId.equals(other.userId))
返回false;
返回true;
}
}
公共接口MyEntityRepository扩展了JpaRepository{
列出findAllByUserId(字符串用户ID);
}
当我初始化Spring数据JPA时,我得到一个错误:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myEntityRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property user found for type MyEntity!
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:615)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:73)
    at com.myproject.backend.common.ServiceContext.start(ServiceContext.java:293)
    at com.myproject.run(AbstractServiceContainer.java:55)
    at com.myproject..run(AbstractServiceContainer.java:1)
    at io.dropwizard.cli.EnvironmentCommand.run(EnvironmentCommand.java:42)
    at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:76)
    at io.dropwizard.cli.Cli.run(Cli.java:70)
    at io.dropwizard.Application.run(Application.java:72)
    at com.myproject..main(CombinedServiceContainer.java:106)
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property user found for type MyEntity!
    at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:359)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241)
    at org.springframework.data.repository.query.parser.Part.<init>(Part.java:76)
    at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:213)
    at org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:321)
    at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:301)
    at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:85)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:60)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:91)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:168)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:69)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:320)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:169)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:224)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:210)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509)
    ... 18 more
线程“main”org.springframework.beans.factory.BeanCreationException中的异常:创建名为“myEntityReportitory”的bean时出错:调用init方法失败;嵌套异常为org.springframework.data.mapping.PropertyReferenceException:未找到MyEntity类型的属性用户! 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512) 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:615) 位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 位于org.springframework.context.annotation.AnnotationConfigApplicationContext。(AnnotationConfigApplicationContext.java:73) 位于com.myproject.backend.common.ServiceContext.start(ServiceContext.java:293) 运行(AbstractServiceContainer.java:55) 在com.myproject..run(AbstractServiceContainer.java:1) 在io.dropwizard.cli.EnvironmentCommand.run(EnvironmentCommand.java:42) 在io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:76) 在io.dropwizard.cli.cli.run(cli.java:70) 运行(Application.java:72) 在com.myproject..main(CombinedServiceContainer.java:106) 原因:org.springframework.data.mapping.PropertyReferenceException:找不到MyEntity类型的属性用户! 位于org.springframework.data.mapping.PropertyPath.(PropertyPath.java:75) 位于org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327) 位于org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:359) 位于org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307) 位于org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270) 位于org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241) 位于org.springframework.data.repository.query.parser.Part.(Part.java:76) 位于org.springframework.data.repository.query.parser.PartTree$OrPart.(PartTree.java:213) 位于org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:321) 位于org.springframework.data.repository.query.parser.PartTree$Predicate.(PartTree.java:301) 位于org.springframework.data.repository.query.parser.PartTree.(PartTree.java:85) 位于org.springframework.data.jpa.repository.query.PartTreeJpaQuery(PartTreeJpaQuery.java:60) 位于org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:91) 位于org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:168) 位于org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:69) 位于org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor。(RepositoryFactorySupport.java:320) 位于org.springframework.data.repository.core.support.RepositoryFactorySu
@Entity
@Table(name = "my_entity")
@JsonIgnoreProperties(ignoreUnknown = true)
@IdClass(Pk.class)
public class MyEntity {
    @Id private Integer type;
    @Id private String userId;

    public Pk getId() {
        return id;
    }

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

}

@IdClass(Pk.class)
public class Pk implements Serializable {
    private static final long serialVersionUID = -3090221844117493661L;
    private Integer type;
    private String userId;

    public Pk() {
    }

    public Pk(String userId, Integer type) {
        this.setUserId(userId);
        this.setType(type);
    }

    public Integer getType() {
        return type;
    }

    public String getUserId() {
        return userId;
    }

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

    public void setUserId(String userId) {
        this.userId = userId;
    }

    // Auto-generated by Eclipse.
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((type == null) ? 0 : type.hashCode());
        result = prime * result + ((userId == null) ? 0 : userId.hashCode());
        return result;
    }

    // Auto-generated by Eclipse.
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Pk other = (Pk) obj;
        if (type != other.type)
            return false;
        if (userId == null) {
            if (other.userId != null)
                return false;
        } else if (!userId.equals(other.userId))
            return false;
        return true;
    }

}
public interface MyEntityRepository extends JpaRepository<MyEntity, Pk>, MyEntityRepositoryCustom {

}

public interface MyEntityRepositoryCustom {

    List<MyEntity> findAllByUserId(String userId);

}

public class MyEntityRepositoryImpl implements MyEntityRepositoryCustom {

    @PersistenceContext
    private EntityManager em;

    @Override
    public List<MyEntityRepositoryCustom> findAllByUserId(String userId) {
        return em
                .createQuery("select o from MyEntity o where o.userId=:userId",
                        MyEntity.class).setParameter("userId", userId).getResultList();
    }

}