我收到以下錯誤:缺失列,即使它存在
Caused by: org.hibernate.HibernateException: Missing column: member_assignable_id in aguil.membership
我覺得這是不尋常的,因爲我只是複製從較早實現(改變了一些名字周圍的模式,但仍大致相同)。
以下是我對我的實體類設置:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "assignable",
uniqueConstraints = @UniqueConstraint(columnNames = {"alias"}))
public abstract class Assignable {
private Long assignableId;
private String alias;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "assignable_id")
public Long getAssignableId() {
return assignableId;
}
public void setAssignableId(Long assignableId) {
this.assignableId = assignableId;
}
@Column(name = "alias", nullable = false)
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
}
@Entity
@Table(name = "team")
public class Team extends Assignable {
private Set<Membership> memberships;
@OneToMany(mappedBy = "team")
public Set<Membership> getMemberships() {
return memberships;
}
public void setMemberships(Set<Membership> memberships) {
this.memberships = memberships;
}
}
@Entity
@Table(name = "person",
uniqueConstraints = {
@UniqueConstraint(columnNames = {"email"}),
@UniqueConstraint(columnNames = {"username"})
})
public class Person extends Assignable {
private String username;
private String firstName;
private String lastName;
private String email;
private String password;
private Set<Membership> memberships;
@Column(name = "username", nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String firstName) {
this.username = username;
}
@Column(name = "first_name", nullable = false)
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "last_name", nullable = false)
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Column(name = "email", nullable = false)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(name = "password", nullable = false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@OneToMany(mappedBy = "member")
public Set<Membership> getMemberships() {
return memberships;
}
public void setMemberships(Set<Membership> memberships) {
this.memberships = memberships;
}
}
@Entity
@IdClass(MembershipKey.class)
@Table(name = "membership")
public class Membership {
private Long memberId;
private Long teamId;
private Person member;
private Team team;
@Id
@Column(name = "member_id")
public Long getMemberId() {
return memberId;
}
public void setMemberId(Long memberId) {
this.memberId = memberId;
}
@Id
@Column(name = "team_id")
public Long getTeamId() {
return teamId;
}
public void setTeamId(Long teamId) {
this.teamId = teamId;
}
@ManyToOne(targetEntity = Person.class)
@PrimaryKeyJoinColumn(name = "member_id", referencedColumnName = "assignable_id")
public Person getMember() {
return member;
}
public void setMember(Person member) {
this.member = member;
}
@ManyToOne(targetEntity = Team.class)
@PrimaryKeyJoinColumn(name = "team_id", referencedColumnName = "assignable_id")
public Team getTeam() {
return team;
}
public void setTeam(Team team) {
this.team = team;
}
}
以下是我的SQL腳本:
CREATE TABLE `aguil`.`assignable` (
`assignable_id` BIGINT NOT NULL AUTO_INCREMENT,
`alias` VARCHAR(255) NOT NULL,
CONSTRAINT `pk_assignable` PRIMARY KEY (`assignable_id`),
CONSTRAINT `uc_assignable_alias` UNIQUE (`alias`)
);
CREATE TABLE `aguil`.`person` (
`assignable_id` BIGINT NOT NULL,
`username` VARCHAR(255) NOT NULL,
`first_name` VARCHAR(255) NOT NULL,
`last_name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
CONSTRAINT `pk_person` PRIMARY KEY (`assignable_id`),
CONSTRAINT `fk_person_assignable_inheritance`
FOREIGN KEY (`assignable_id`)
REFERENCES `aguil`.`assignable` (`assignable_id`),
CONSTRAINT `uc_person_username` UNIQUE (`username`),
CONSTRAINT `uc_person_email` UNIQUE (`email`)
);
CREATE TABLE `aguil`.`team` (
`assignable_id` BIGINT NOT NULL,
CONSTRAINT `pk_team` PRIMARY KEY (`assignable_id`),
CONSTRAINT `fk_team_assignable_inheritance`
FOREIGN KEY (`assignable_id`)
REFERENCES `aguil`.`assignable` (`assignable_id`)
);
CREATE TABLE `aguil`.`membership` (
`member_id` BIGINT NOT NULL,
`team_id` BIGINT NOT NULL,
CONSTRAINT `pk_membership` PRIMARY KEY (`member_id`, `team_id`),
CONSTRAINT `fk_membership_assignable_members`
FOREIGN KEY (`member_id`)
REFERENCES `aguil`.`person` (`assignable_id`),
CONSTRAINT `fk_membership_team_teams`
FOREIGN KEY (`team_id`)
REFERENCES `aguil`.`team` (`assignable_id`)
);
我已經在計算器看了一些相關的資源,如:JPA/Hibernate: "Missing Column" when joining columns,但不能似乎仍然解決它。我一直在調試這幾個小時,任何幫助,將不勝感激。
你忘了添加Person類的代碼。 – 2014-11-23 10:50:26
已添加人員。對不起,關於 – Chad 2014-11-23 10:55:11