2011-06-21 124 views
0

我有一個與休眠問題。 (((休眠:映射問題

!!! Image with Database Schema !!!

映射 (用於吸氣劑的/設定器的我使用Lombok的)

User.java

@Entity 
@Table(name = "users") 
public @Data class User 
{ 

// Base Mapping 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "user_id") 
@Getter @Setter Long user_id; 

@Column(name = "user_name") 
private @Getter @Setter String user_name; 

@Column(name = "login") 
private @Getter @Setter String login; 

@Column(name = "password") 
private @Getter @Setter String password; 

// Releations Mapping 

// Releations With Project 

@ManyToMany(cascade={CascadeType.ALL}) 
@JoinTable(name="users_on_projects", 
     [email protected](name="user_id"), 
     [email protected](name="project_id")) 
     private @Getter @Setter List<Project> projects = new Vector(); 


@ManyToMany 
@JoinTable(name="intervals", 
     [email protected](name="users_on_projects_id"), 
     [email protected](name="interval_id")) 
     private @Getter @Setter List<Interval> intervals = new Vector(); 
} 

Project.java

@Entity 
@Table(name = "projects") 
public @Data class Project 
{ 

// Base Mapping 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name ="project_id") 
private @Getter @Setter Long project_id; 

@Column(name ="project_name") 
private @Getter @Setter String project_name; 


// Releations Mapping 

// Releations With User 

    @ManyToMany(cascade={CascadeType.ALL}) 
@JoinTable(name="users_on_projects", 
     [email protected](name="project_id"), 
     [email protected](name="user_id")) 
    private @Getter @Setter List<User> users = new Vector(); 

@OneToMany 
@JoinTable(name="intervals", 
     [email protected](name="users_on_projects_id"), 
     [email protected](name="interval_id")) 
     private @Getter @Setter List<Interval> intervals = new Vector(); 
} 

Interval.java

@Entity 
@Table(name = "intervals") 
public class Interval 
{ 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "interval_id") 
@Getter @Setter Long interval_id; 

@Column(name ="start_time") 
private @Setter @Getter 
      @Temporal(javax.persistence.TemporalType.TIMESTAMP) 
      Date start_time; 

@Column(name ="finish_time") 
private @Setter @Getter 
     @Temporal(javax.persistence.TemporalType.TIMESTAMP) 
     Date FinishTime; 


@ManyToOne(cascade={CascadeType.ALL}) 
@JoinTable(name="users_on_projects", 
     [email protected](name="users_on_projects_id"), 
     [email protected](name="user_id")) 
     private @Getter @Setter User user; 


@JoinTable(name="users_on_projects", 
     [email protected](name="users_on_projects_id"), 
     [email protected](name="project_id")) 
     private @Getter @Setter 
@ManyToOne 
     Project project; 


@ManyToOne(cascade = CascadeType.ALL) 
@JoinColumn(name="interval_type_id") 
private @Getter @Setter IntervalType intervalType; 

} 

IntervalType.java

@Entity 
@Table(name = "interval_type") 
public class IntervalType 
{ 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "interval_type_id") 
@Getter @Setter Long interval_type_id; 

@Column(name = "interval_type_name") 
private @Getter @Setter String interval_type_name; 
} 

我可以讀取任何表任何數據,但不能寫入間隔表((

錯誤消息是: *字段 'users_on_projects_id' 沒有默認值* 和Hibernate生成此SQL代碼:(?,?,?) INSERT INTO區間(finish_time,interval_type_id,START_TIME)值

這有什麼錯映射?

回答

0

你的映射看起來有點奇怪(但我可能理解是錯誤的)。我發現這樣奇怪的是,這兩個關係:

  • 用戶 - >間隔
  • 項目 - >間隔

存儲在同一個連接表「間隔」,並在這兩種情況下的一個案例JoinColumn是「users_on_projects_id」。

對於我來說,它看起來像一個副本和過去的錯誤。

+0

那麼,什麼是正確的映射,我應該使用這個數據庫: http://img12.imageshost.ru/img/2011/06/19/image_4dfdbd74a9911.png ? – anonymous

+0

@anonymous:首先刪除intervall和項目之間的關係,然後看看所謂的ternery關聯:http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html#集合三元 – Ralph