【问题标题】:How to use findByxxx in our custom repository如何在我们的自定义存储库中使用 findByxxx
【发布时间】:2014-12-18 20:29:54
【问题描述】:

我想使用 findByHostObjectId 查询 MyEnity,但它显示“No property hostObjectId found for type MyEntity

我有我的 Rest Controller 和 @autowired MyRepository,我想使用 MyRepository.findByHostObjectId(hostObjectId) 通过请求参数 (hostObjectId) 获取 MyEntity。

存储库

public interface MyRepository extends PagingAndSortingRepository<MyEntity, MyEntityId> {
//success 
MyEntity findById(@Param("id") MyEntityId id);

//fail
MyEntity findByHostObjectId(@Param("hostObjectId") Integer hostObjectId);}

我的实体

public class MyEntity implements java.io.Serializable {

private MyEntityId id;

public MyEntity() {
}

public MyEntity(MyEntityId id) {
    this.id = id;
}

@EmbeddedId
public MyEntityId getId() {
    return this.id;
}

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

我的实体ID

@Embeddable
public class MyEntityId implements java.io.Serializable {
private static final long serialVersionUID = 1L;

private int objectId;
private Integer hostObjectId;
private String hostName;

public MyEntityId() {
}

public MyEntityId(int objectId, Integer hostObjectId, String hostName) {
    this.objectId = objectId;
    this.hostObjectId = hostObjectId;
    this.hostName = hostName;
}

public int getObjectId() {
    return this.objectId;
}

public void setObjectId(int objectId) {
    this.objectId = objectId;
}

public Integer getHostObjectId() {
    return this.hostObjectId;
}

public void setHostObjectId(Integer hostObjectId) {
    this.hostObjectId = hostObjectId;
}

public String getHostName() {
    return this.hostName;
}

public void setHostName(String hostName) {
    this.hostName = hostName;
}}

MyEntiry.hbm.xml

<hibernate-mapping>
    <class name="sud.MyEntity" table="sud_view_myentity">
    <composite-id name="id" class="sud.MyEntityId">
        <key-property name="objectId" type="int">
             <column name="OBJECT_ID" />
        </key-property>
        <key-property name="hostObjectId" type="java.lang.Integer">
             <column name="HOST_OBJECT_ID" />
        </key-property>
        <key-property name="hostName" type="string">
             <column name="HOST_NAME" length="64" />
        </key-property>
   </composite-id>
   </class>
</hibernate-mapping>

【问题讨论】:

  • 由于hostObjectId 是一个嵌套属性,您是否尝试过类似findByMyEntityHostObjectId 的方法定义?请参阅 Spring Data 参考的property expressions 部分。

标签: rest spring-data


【解决方案1】:

您是否尝试过对 findByMyEntityId_HostObjectId 等嵌套属性使用属性表达式?我不确定这是否可行,因为可嵌入的类 id 是特殊情况。

查看链接中的示例

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions

【讨论】:

    【解决方案2】:

    非常感谢

    有效!!!

    MyEntity findById_HostObjectId(@Param("hostObjectId") Integer hostObjectId);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2012-07-15
      • 1970-01-01
      • 2018-05-09
      • 2018-05-21
      相关资源
      最近更新 更多