0

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

製品のグループ名にアクセスしたいのですが、これは主キーと外部キーのタイプが原因であることは理解していますが、フォーラムで検索しても問題は見つかりませんでした。

ご協力いただきありがとうございます

4

2 に答える 2

0

@carbontax、私はこのHQLをやった:

String hql = "select p from Product as p join p.productGroup as g where p.productId = :id";

次に、このエラーを修正する問題を見つけました。実際、私は JSP の列にアクセスするためにこのコードを持っていました:

<td class="GlobalInfoTitle">Group</td><td><c:out value="${model.product.grp_tri}"/></td>

そして、私はこれを次のように修正します:

<td class="GlobalInfoTitle">Groupe</td><td><c:out value="${model.product.productGroup.grp_tri}"/></td>

また、Product.java の基数を ManyToOne に、ProductGroup.java の基数を OneToMany に変更しました。

主な問題は、オブジェクト Product にアクセスして、オブジェクト ProductGroup の代わりに自分のプロパティを取得したことです。

誰かが私と同じ問題を抱えている場合、彼は私に助けを求めることができます。なぜなら、問題は最終的に簡単だからです...

于 2012-12-13T14:14:44.897 に答える