У меня проблема с Hibernate. Что мне нужно сделать, так это получить коллекцию 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;
Я не копировал геттеры и сеттеры по космическим причинам. Это запрос, который я хочу выполнить:
@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'
Это расстраивает = (
РЕДАКТИРОВАТЬ: вот 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)