2015-11-16 110 views
0

未知的專欄中,我有一個數據庫,如下所示@OneToOne映射JPA:在字段列表

Table Enterprise 
ent_id (PK) 
loc_id 
ent_name 

Table Location 
loc_id (PK) 
loc_name 

所以我想一個字段添加到企業模型類:「位置」,這是一個@OneToOne關係。不幸的是,當添加這個字段時,應用程序不再工作。

在企業級的代碼位置:

@OneToOne 
@JoinColumn(name="loc_id",referencedColumnName="loc_id") 
private Location location; 

與getter &二傳手的位置。

的PersistenceException:org.hibernate.exception.SQLGrammarException:無法提取的ResultSet

[...]

造成

我加入這個位置字段時,遇到下列錯誤:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'字段列表'中的未知列'enterprise0_.location'

在我看來,它正在數據庫中搜索一列'位置',但這一列不在數據庫中。它應該使用loc_id列代替!我嘗試添加@Transient,但這不起作用。

感謝您的幫助!

企業級

@Entity 
@Table(name = "Enterprise") 
public class Enterprise implements Serializable { 
private int entId; 
private int locId; 
private String entName; 
private int entDescription; 

@OneToMany(mappedBy = "enterprise") 
private List<SalesOrder> salesOrders; 

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "ent_id") 
public int getEntId() { 
    return entId; 
} 

public void setEntId(int entId) { 
    this.entId = entId; 
} 

@Basic 
@Column(name = "loc_id") 
public int getLocId() { 
    return locId; 
} 

public void setLocId(int locId) { 
    this.locId = locId; 
} 

@Basic 
@Column(name = "ent_name") 
public String getEntName() { 
    return entName; 
} 

public void setEntName(String entName) { 
    this.entName = entName; 
} 

@Basic 
@Column(name = "ent_description") 
public int getEntDescription() { 
    return entDescription; 
} 

public void setEntDescription(int entDescription) { 
    this.entDescription = entDescription; 
} 

//bi-directional one-to-one association to Location 
@OneToOne(cascade = CascadeType.ALL) 
@JoinColumn(name="loc_id",referencedColumnName="loc_id") 
private Location location; 


public Location getLocation() { 
    return this.location; 
} 

public void setLocation(Location location) { 
    this.location = location; 
} 

Location類

private int locId; 
private String locCountry; 
private int locPostcode; 
private String locCity; 
private String locStreet; 
private int locNumber; 
private Integer locSubNumber; 


@Override 
public String toString() { 
    return locStreet + " " + locNumber + ", " + locPostcode + " " + locCity + ", " + locCountry; 
} 

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "loc_id") 
public int getLocId() { 
    return locId; 
} 

public void setLocId(int locId) { 
    this.locId = locId; 
} 

@Basic 
@Column(name = "loc_country") 
public String getLocCountry() { 
    return locCountry; 
} 

public void setLocCountry(String locCountry) { 
    this.locCountry = locCountry; 
} 

@Basic 
@Column(name = "loc_postcode") 
public int getLocPostcode() { 
    return locPostcode; 
} 

public void setLocPostcode(int locPostcode) { 
    this.locPostcode = locPostcode; 
} 

@Basic 
@Column(name = "loc_city") 
public String getLocCity() { 
    return locCity; 
} 

public void setLocCity(String locCity) { 
    this.locCity = locCity; 
} 

@Basic 
@Column(name = "loc_street") 
public String getLocStreet() { 
    return locStreet; 
} 

public void setLocStreet(String locStreet) { 
    this.locStreet = locStreet; 
} 

@Basic 
@Column(name = "loc_number") 
public int getLocNumber() { 
    return locNumber; 
} 

public void setLocNumber(int locNumber) { 
    this.locNumber = locNumber; 
} 

@Basic 
@Column(name = "loc_sub_number") 
public Integer getLocSubNumber() { 
    return locSubNumber; 
} 

public void setLocSubNumber(Integer locSubNumber) { 
    this.locSubNumber = locSubNumber; 
} 
+0

CSN定義你發佈你的類的精確映射。 –

+0

@Prera​​kTiwari我加了班! –

+2

爲什麼在企業級中同時具有int locld和Location位置?你的@OneToOne to Location已經爲你提供了locId屬性..而你說Location-Enterprise是雙向的,但是它在位置方面沒有定義.. – mendieta

回答

1

嘗試從企業級去除int locId,因爲你已經宣佈Location location,其中包括該屬性。

另外,你提到位置的企業是雙向的方向,但關係不是在位置側