2012-12-12 2 views
0

나는 Spring에서 Hibernate annotation으로 ORM을 사용하려고 시도했지만, 관절을 만들고 싶을 때 실패했다.봄 + 최대 절전 모드 ORM annotation

내가 (자바 클래스에 따라) 두 개의 테이블이 있습니다

제품 (PK productId에, FK productGroup) ProductGroup (PK productGroupTri를)

Product.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; 
} 
} 

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 reque

org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.String, got class java.lang.Integer 

나는 제품의 그룹 이름으로 접근하고 싶습니다 나는이 때문에 차의 종류의 이해 : 나는 다음과 같은 메시지가있어

String hql = "from Product as p where p.productId = :id"; 
    Query query = sessionFactory.getCurrentSession().createQuery(hql); 
    query.setInteger("id", productId); 

    return (Product) query.uniqueResult(); 

을 : 실패 일 외래 키지만 포럼에서 검색을 했는데도 문제를 찾지 못했습니다.

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

@Id 
@Column(name="grp_tri") 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private int productGroupTri; 

답변

0

@carbontax, 나는이 HQL했다 : 그런 다음

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

을, 당신이 ProductGroup.java 클래스의 ID에 대한 integer가 있어야처럼 당신의 도움이

2

에 대한

덕분에 보이는 이 오류를 해결할 수있는 문제점을 발견했습니다. 사실, 난 내 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> 

내가 가지고도 ManyToOne에 그리고에 Product.java에서 카디널리티를 수정 ProductGroup.java를 OneToMany로 변경하십시오.

중요한 문제는 Product 객체에 액세스하여 대신 ProductGroup 객체를 가져 오는 것입니다. 사람이 나와 같은 문제를 가지고

경우 그는 그래서 당신은 내가 방법을 찾을 수있는 방법을 말해 줄 수 나는이 ID에 대한 문자열을 계속해야 ... 문제가 쉽게 드디어 원인

+0

을 도와 요청할 수 있습니다 문자열이 생길 때까지 문제를 해결 하시겠습니까? – tvirgil

+0

[documentation] (http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-identifier)가 도움이 될 수 있기를 바랍니다 – Atropo

+0

주석은 정확하지 않은 것 같습니다. , ID 형식에 문제가 잘해야한다 ...하지만 감사합니다. – tvirgil

관련 문제