Hibernate在获取集合时失败

时间:2012-01-12 14:08:27

标签: mysql hibernate java-ee

我遇到了Hibernate的问题。我要做的是在选择Deliverable时检索Team的集合。这是Deliverable类:

@Entity(name="Deliverable")
{"MilestoneID", "TeamID"})})
@Table(name="Deliverable")

public class Deliverable implements Serializable, Comparable<Deliverable> {

private static final long serialVersionUID = 2138806103760654922L;

@Id
@Column(name="DeliverableID", nullable=false)
@GeneratedValue(strategy=GenerationType.AUTO)
private int deliverableID;

@ManyToOne(optional=false)
@JoinColumn(name="MilestoneID", nullable=false)
private Milestone milestone;

@ManyToOne(optional=false)
@JoinColumn(name="TeamID", nullable=false)
private Team team;

@Column(name="Score", nullable=false)
private int score;

@OneToMany(mappedBy="deliverable")
private Set<Version> versions;

@OneToMany(mappedBy="visibleDeliverables")
private Collection<Team> viewers;

由于空间原因,我没有复制getter和setter。这是我想要执行的查询:

@NamedQuery(
        name="Deliverable.getDeliverableById",
        query="SELECT d FROM Deliverable AS d LEFT JOIN FETCH d.viewers AS v WHERE d.deliverableID = :id"
        )

这是我得到的例外:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'viewers1_.DeliverableID' in 'field list'

令人沮丧=(

编辑:这是创建Deliverable表的SQL

CREATE  TABLE IF NOT EXISTS `Deliverable` (
`DeliverableID` INT NOT NULL AUTO_INCREMENT ,
`MilestoneID` INT NOT NULL ,
`TeamID` INT NOT NULL ,
`Score` INT NOT NULL DEFAULT 1 ,
PRIMARY KEY (`DeliverableID`) ,
INDEX `fk_Delivarable_Milestone` (`MilestoneID` ASC) ,
INDEX `fk_Delivarable_Team` (`TeamID` ASC) ,
UNIQUE INDEX `MilestoneID_TeamID_UNIQUE` (`MilestoneID` ASC, `TeamID` ASC) ,
CONSTRAINT `fk_Delivarable_Milestone`
FOREIGN KEY (`MilestoneID` )
REFERENCES `Milestone` (`MilestoneID` )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_Delivarable_Team`
FOREIGN KEY (`TeamID` )
REFERENCES `Team` (`TeamID` )
ON DELETE CASCADE
ON UPDATE CASCADE)

编辑:这是团队实体

public class Team implements Serializable {

private static final long serialVersionUID = -6434099499828214268L;

@Id
@Column(name="TeamID", nullable=false)
@GeneratedValue(strategy=GenerationType.AUTO)
private int teamID;

@ManyToOne(optional=false)
@JoinColumn(name="ProjectID", nullable=false)
private Project project;

@ManyToOne(optional=false)
@JoinColumn(name="Founder", nullable=false)
private Student founder;

@Column(name="Name", nullable=false, length=100)
private String name;

@ManyToMany
@JoinTable(name="Student_Invite", joinColumns={@JoinColumn(name="TeamID")}, 
inverseJoinColumns={@JoinColumn(name="StudentID")})
private Set<Student> invitedStudents = new HashSet<Student>();

@ManyToMany
@JoinTable(name="Student_Member", joinColumns={@JoinColumn(name="TeamID")}, 
inverseJoinColumns={@JoinColumn(name="StudentID")})
private Set<Student> members = new HashSet<Student>();

@ManyToMany
@JoinTable(name="Deliverable_View", joinColumns={@JoinColumn(name="ViewerTeamID")}, 
inverseJoinColumns={@JoinColumn(name="DeliverableID")})
private Set<Deliverable> visibleDeliverables = new HashSet<Deliverable>();

@OneToMany(mappedBy="team")
private Set<Deliverable> deliverables = new HashSet<Deliverable>();

@Column(name="Frozen", nullable=false)
private boolean frozen;

编辑:Deliverable_View

CREATE  TABLE IF NOT EXISTS `Deliverable_View` (
`ViewerTeamID` INT NOT NULL ,
`ViewedTeamID` INT NOT NULL ,
`DeliverableID` INT NOT NULL ,
PRIMARY KEY (`ViewerTeamID`, `ViewedTeamID`, `DeliverableID`) ,
INDEX `fk_ViewerTeamID` (`ViewerTeamID` ASC) ,
INDEX `fk_ViewedTeamID` (`ViewedTeamID` ASC) ,
INDEX `fk_DeliverableView_Delivarable` (`DeliverableID` ASC) ,
CONSTRAINT `fk_ViewerTeamID`
FOREIGN KEY (`ViewerTeamID` )
REFERENCES `Team` (`TeamID` )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_ViewedTeamID`
FOREIGN KEY (`ViewedTeamID` )
REFERENCES `Team` (`TeamID` )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_DeliverableView_Delivarable1`
FOREIGN KEY (`DeliverableID` )
REFERENCES `Deliverable` (`DeliverableID` )
ON DELETE CASCADE
ON UPDATE CASCADE)

0 个答案:

没有答案