2014-10-09 7 views
0

내 데이터베이스 테이블에 대한 모델 클래스를 작성하기 위해 최대 절전 모드 주석을 사용하려고합니다.hibernate4 : 참조하는 외부 키의 컬럼 수가 잘못되었습니다. 2이어야합니다

나는 각각 기본 키 User와 ChartDetails를 가진 두개의 테이블을 가지고있다.

enter code here 
package com.winnow.springservice.domain; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 


//User Entity class mapped with hibernate 
@Entity 
@Table(name="User") 
@SuppressWarnings(value = { "all" }) 
public class User implements Serializable 
{ 

@Id 
@Column(name="user_id") 
public String user_Id; 

@Column(name="user_name") 
public String userName; 
public String password; 

@Column(name="last_login") 
public String last_Login; 

@Column(name="role_id") 
public int role_Id; 
public int status; 



/** 
* @return the user_Id 
*/ 
public String getUser_Id() { 
    return user_Id; 
} 
/** 
* @param user_Id the user_Id to set 
*/ 
public void setUser_Id(String user_Id) { 
    this.user_Id = user_Id; 
} 
/** 
* @return the last_Login 
*/ 
public String getLast_Login() { 
    return last_Login; 
} 
/** 
* @param last_Login the last_Login to set 
*/ 
public void setLast_Login(String last_Login) { 
    this.last_Login = last_Login; 
} 
/** 
* @return the role_Id 
*/ 
public int getRole_Id() { 
    return role_Id; 
} 
/** 
* @param role_Id the role_Id to set 
*/ 
public void setRole_Id(int role_Id) { 
    this.role_Id = role_Id; 
} 
/** 
* @return the status 
*/ 
public int getStatus() { 
    return status; 
} 
/** 
* @param status the status to set 
*/ 
public void setStatus(int status) { 
    this.status = status; 
} 
/** 
* @return the userName 
*/ 
public String getUserName() { 
    return userName; 
} 
/** 
* @param userName the userName to set 
*/ 
public void setUserName(String userName) { 

    System.out.println("username"+userName); 
    this.userName = userName; 
} 
/** 
* @return the password 
*/ 
public String getPassword() { 
    return password; 
} 
/** 
* @param password the password to set 
*/ 
public void setPassword(String password) 
{ 


    System.out.println("password "+password); 
    this.password = password; 
} 


} 

차트 정보

enter code here 
package com.winnow.springservice.domain; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="Chart_Details") 
@SuppressWarnings(value = { "all" }) 
public class ChartDetails implements Serializable 
{ 

@Id 
@Column(name="chart_id") 
public int chartId; 

@Id 
@Column(name="chart_type_id") 
public int chartTypeId; 

@Column(name="chart_name") 
public String chartName; 

@Column(name="x_axis") 
public String x_axis; 

@Column(name="y_axis") 
public String y_axis; 

@Column(name="z_axis") 
public int z_axis; 

@Column(name="chart_filter_id") 
public int chartFilterId; 

@Column(name="is_data_table") 
public boolean isDataTable; 

@Column(name="dataset_id") 
public int datasetId; 

@Column(name="user_id") 
public int userId; 


@Column(name="project_id") 
public int projectId; 

} 

그리고 위의 두 테이블에서 외래 키와 같은 사용자 ID와 chart_id을 가지고 한 번 더 테이블 - ChartsStarredBy을 보유하고 있습니다.

그러나 ChartsStarredBy 테이블에서 이러한 제약 조건을 참조 할 수있는 방법을 찾을 수 없습니다.

enter code here 
package com.winnow.springservice.domain; 

import java.io.Serializable; 
import java.util.Date; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 


@Entity 
@Table(name="Chart_Starred_By") 
@SuppressWarnings(value = { "all" }) 
public class ChartsStarredBy implements Serializable 
{ 

@Id 
public int id; 

@Temporal(TemporalType.DATE) 
public Date starred_date; 


@ManyToOne 
@JoinColumn(name = "FK_chart_id4") 
private ChartDetails chart_details; 

@ManyToOne 
@JoinColumn(name = "FK_user_id4") 
private User user; 

public Date getStarred_date() 
{ 
    return starred_date; 
} 

public void setStarred_date(Date starred_date) 
{ 
    this.starred_date = starred_date; 
} 



    public User getUser() 
    { 
    return user; 
    } 

public void setUser(User user) 
{ 
    this.user = user; 
} 

public ChartDetails getChart_details() { 
    return chart_details; 
} 

public void setChart_details(ChartDetails chart_details) { 
    this.chart_details = chart_details; 
} 

}

날이 달성 도와주세요? 미리 감사드립니다.

답변

0

우선 기본 키인 User 테이블의 정수 ID를 만들어야합니다. 여기에 코드에서 String 유형으로 작성합니다.

당신은 잘못 여기서 뭐하는

@ManyToOne 
@JoinColumn(name = "FK_chart_id4") 
private ChartDetails chart_details; 

@ManyToOne 
@JoinColumn(name = "FK_user_id4") 
private User user; 

당신은 다른 클래스의 ID를 참조 할 때 그래서 당신은 해당 ID의 이름을 제공해야합니다 & ChartDetails 테이블

@Id 
@Column(name="user_id") 
public String user_Id; 

AND 

@Id 
@Column(name="chart_id") 
public int chartId; 

로 사용자 테이블에 ID가 in @JoinColumn. 그냥 같은이 또한이

@ManyToOne 
@ForeignKey(name = "user_Id") 
private User user; 

예 튜토리얼처럼 최대 절전 모드에서 @ForeignKey (이름 = "USER_ID") 주석을 사용할 수 있습니다

@ManyToOne 
@JoinColumn(name = "chartId") 
private ChartDetails chart_details; 

@ManyToOne 
@JoinColumn(name = "user_Id") 
private User user; 

: - Hibernate One To Many Annotation Tutorial