在jpa的JpaRepository需要對符合主鍵@EmbeddedId 中的一個字段進行查詢的用法

在jpa的JpaRepository需要對符合主鍵@EmbeddedId 中的一個字段進行查詢的用法:


在JpaRepository Interface中使用findByIdRoleId 這樣的語法。jpa會自動生成正確的sql語句。


例子:

1.pojo  類 

RoleMenu.java

package com.ninelephas.whale.pojo;

import java.io.Serializable;
import javax.persistence.*;
import java.sql.Timestamp;


/**
 * The persistent class for the role_menu database table.
 * 
 */
@Entity
@Table(name="role_menu")
@NamedQuery(name="RoleMenu.findAll", query="SELECT r FROM RoleMenu r")
public class RoleMenu implements Serializable {
	private static final long serialVersionUID = 1L;

	@EmbeddedId
	private RoleMenuPK id;

	@Column(name="created_by")
	private String createdBy;

	。。。

}

2.複合組件類

RoleMenuPK.java

package com.ninelephas.whale.pojo;

import java.io.Serializable;
import javax.persistence.*;

/**
 * The primary key class for the role_menu database table.
 * 
 */
@Embeddable
public class RoleMenuPK implements Serializable {
	//default serial version id, required for serializable classes.
	private static final long serialVersionUID = 1L;

	@Column(name="menu_id")
	private String menuId;

	@Column(name="role_id")
	private String roleId;

	public RoleMenuPK() {
	}
	public String getMenuId() {
		return this.menuId;
	}
	public void setMenuId(String menuId) {
		this.menuId = menuId;
	}
	public String getRoleId() {
		return this.roleId;
	}
	public void setRoleId(String roleId) {
		this.roleId = roleId;
	}

	public boolean equals(Object other) {
		if (this == other) {
			return true;
		}
		if (!(other instanceof RoleMenuPK)) {
			return false;
		}
		RoleMenuPK castOther = (RoleMenuPK)other;
		return 
			this.menuId.equals(castOther.menuId)
			&& this.roleId.equals(castOther.roleId);
	}

	public int hashCode() {
		final int prime = 31;
		int hash = 17;
		hash = hash * prime + this.menuId.hashCode();
		hash = hash * prime + this.roleId.hashCode();
		
		return hash;
	}
}

3.JpaRepository 繼承接口

@Repository("com.ninelephas.whale.repository.IRoleMenuRepository")
public interface IRoleMenuRepository extends JpaRepository<RoleMenu, RoleMenuPK>, PagingAndSortingRepository<RoleMenu, RoleMenuPK>  {
    
 
    public List<RoleMenu> findByIdRoleId(String roleId);

}
JpaRepository只要定義 
 public List<RoleMenu> findByIdRoleId(String roleId);

Id - is the  @EmbeddedId in RoleMenu. 

RoleId is an attribute within RoleMenuPK

這樣jpa就會自動生成對role_menu中的複合主鍵中的role_id 進行查詢的sql語句



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章