0

我尝试在 Spring 中将 ORM 与 Hibernate 注释一起使用,但是当我想制作关节时它失败了。

我有两个表(根据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

2

看起来你应该integer在课堂上有一个 id ProductGroup.java

 @Entity
 @Table(name="product_grp")
 public class ProductGroup {

 @Id
 @Column(name="grp_tri")
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private int productGroupTri;
于 2012-12-12T10:14:58.373 回答
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。

主要问题是我访问了对象产品来获取我的属性而不是对象产品组。

如果有人遇到与我相同的问题,他可以向我寻求帮助,因为问题最终很容易......

于 2012-12-13T14:14:44.897 回答