首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OneToOne和JoinTable

OneToOne和JoinTable
EN

Stack Overflow用户
提问于 2014-07-04 14:09:30
回答 1查看 1.6K关注 0票数 0

我试图将JPA Enity站点与另一个JPA实体(地址)与单向一对一的关系联系起来,但我无法让它工作。复杂的是拥有关系(站点)的实体是抽象的,它是由另一个实体,即博物馆实现的。更复杂的是,抽象实体继承自第三个实体,仍然是抽象的,即IdentifiableEntity。

以下是代码:

网站:

代码语言:javascript
复制
@Configurable
@Entity
public abstract class Site extends IdentifiableEntity {

@NotNull
@OneToOne
@JoinColumn(name = "address_id")
private Address address;

public Address getAddress() {
    return this.address;
}

public void setAddress(Address address) {
    this.address = address;
}
}

地址:

代码语言:javascript
复制
@Configurable
@Entity
public class Address extends IdentifiableEntity {

@NotNull
private String street;

private String number;
}

博物馆:

代码语言:javascript
复制
@Configurable
@Entity
public class Museum extends Site {
    /* some stuff */
}

对于每个实体,我创建了一个JPARepository。

在部署期间,似乎不存在错误,但当试图通过调用SiteRepository上的SiteRepository(即扩展JPARepository的接口)访问数据库时,我得到以下运行时错误堆栈:

代码语言:javascript
复制
HTTP Status 500 - Request processing failed; 
nested exception is org.springframework.orm.jpa.JpaSystemException: 
org.hibernate.exception.SQLGrammarException: 
    could not extract ResultSet; 
    nested exception is javax.persistence.PersistenceException: 
org.hibernate.exception.SQLGrammarException: could not extract ResultSet

root cause:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'site0_.address' in 'field list'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-04 14:39:23

尝试为@OneToOne关系定义联接列,例如:

代码语言:javascript
复制
@OneToOne @JoinColumn(name="address_id")
private Address address;

如果没有显式定义join列,它将默认为变量的名称,我认为这就是获得消息Unknown column 'site0_.address'的原因。

当然,也要确保join列存在于表中(除非使用hibernate.hbm2ddl.auto=update)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24576157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档