Spring で Hibernate アノテーションを使用して ORM を使用しようとしましたが、ジョイントを作成しようとすると失敗します。
私は2つのテーブルを持っています(Javaクラスによる):
製品 (PK productId、FK productGroup) 製品グループ (PK productGroupTri)
製品.java
@Entity
@Table(name="product")
public class Product implements Serializable{
@Id
@Column(name="product_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int productId;
@Column(name="product_name")
private String productName;
@OneToOne
@PrimaryKeyJoinColumn
private ProductGroup productGroup;
public void setProductId(int productId) {
this.productId = productId;
}
public int getProductId() {
return this.productId;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getproductName() {
return this.productName;
}
public void setProductGroup(ProductGroup productGroup) {
this.productGroup = productGroup;
}
public ProductGroup getProductGroup() {
return this.productGroup;
}
}
製品グループ.java
@Entity
@Table(name="product_grp")
public class ProductGroup {
@Id
@Column(name="grp_tri")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private String productGroupTri;
@Column(name="grp_div")
private String productGroupDiv;
@OneToOne(mappedBy="productGroup", cascade=CascadeType.ALL)
private Product product;
public void setProductGroupTri(String productGroupTri) {
this.productGroupTri = productGroupTri;
}
public String getProductGroupTri() {
return this.productGroupTri;
}
public void setProductGroupDiv(String productGroupDiv) {
this.productGroupDiv = productGroupDiv;
}
public String getProductGroupDiv() {
return this.productGroupDiv;
}
public void setProduct(Product product) {
this.product = product;
}
public Product getProduct() {
return this.product;
}
}
そして、失敗する HQL リクエスト:
String hql = "from Product as p where p.productId = :id";
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setInteger("id", productId);
return (Product) query.uniqueResult();
次のメッセージがあります。
org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.String, got class java.lang.Integer
製品のグループ名にアクセスしたいのですが、これは主キーと外部キーのタイプが原因であることは理解していますが、フォーラムで検索しても問題は見つかりませんでした。
ご協力いただきありがとうございます