2016-05-08 13 views
0

Ich arbeite an Hibernate-Projekt, das die folgenden drei Entität haben, wenn ich eine Beziehung zwischen den Entitäten GetOnName hinzufügen Feld 'user_id' hat keinen Standardwert.Hibernate Feld 'user_id' hat keinen Standardwert

, wenn versuchen, neue Themen, die ich

erhalten einfügen

Hibernate:? (?,?,?,) Einfügen in Themen (Inhalt, Datum, Bild, image_name) Werte 8. Mai 2016 11.46.56 PM org.hibernate.util.JDBCExceptionReporter logExceptions Warnung: SQL-Fehler: 1364, SQLState: HY000 08. Mai 2016 11:46:56 PM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Feld 'user_id' hat nicht ein Standardwert

und erhalten Sie den gleichen Fehler, wenn Sie versuchen, neue wie Datensatz

einfügen

Benutzerklasse

public class User implements Serializable{ 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "user_id", unique = true, nullable = false) 
private long id; 

@Column(name = "first_name", nullable = false, length = 10) 
private String firstName; 

@Column(name = "last_name", nullable = false, length = 10) 
private String lastName; 

@Column(name = "role", nullable = false, length = 10) 
private String role; 


@Column(name = "email", unique = true, nullable = false, length = 10) 
private String email; 


@Column(name = "password", nullable = false, length = 10) 
private String password; 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "user") 
private Set<Topics> topics=new HashSet<Topics>(); 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "user1") 
private Set<Like> likes=new HashSet<Like>(); 

//getter and setter 

wie Klasse

@Entity 
@Table(name = "likes") 
public class Like implements Serializable{ 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "likes_id", unique = true, nullable = false) 
private long id; 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "user_id", nullable = false,insertable = false, updatable = false) 
private User user1; 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "topics_id", nullable = false,insertable = false, updatable = false) 
private Topics topics; 
//getter and setter 

Themen Klasse

@Entity 
@Table(name = "topics") 
public class Topics implements Serializable{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "topics_id", unique = true, nullable = false) 
private long id; 

@Column(name = "content", unique = true, nullable = false) 
private String content; 

@Temporal(TemporalType.DATE) 
@Column(name = "date") 
private Date date; 

@Column(name = "image_name") 
private String imageName; 

@Lob 
@Column(name="image", columnDefinition="longblob") 
private byte[] image; 


@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "user_id", nullable = false,insertable = false, updatable = false) 
private User user; 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "topics") 
private Set<Like> likes=new HashSet<Like>(); 
//getter and setter 

Hibernate Konfigurationsdatei

<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.password">root</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/social</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="show_sql">true</property> 
    <property name="hbm2ddl.auto">create</property> 
    <mapping class="com.pro.model.User"></mapping> 
    <mapping class="com.pro.model.Topics"></mapping> 
    <mapping class="com.pro.model.Like"></mapping> 
</session-factory> 

Antwort

0

Wahrscheinlich haben Sie den Benutzer von Themen, den Sie versucht haben, eine Themen-Tabelle einzufügen, nicht festgelegt.

Noch eine Sache, singuläre Klassennamen verwenden. Themen -> Thema

0

Ich sehe hier zahlreiche Probleme:

  • Sind Sie sicher, dass Themen eher nicht ManyToMany sind als OneToMany auf allen Seiten (wie nicht gültig Zeug scheint) ... (ein Volk kann an vielen Themen interessiert sein, Themen können viele Leute enthalten)
  • Wenn Sie neues Thema mit neuen Benutzer persistent und möchten, sollten Sie @OneToMany verwenden (Kaskade = {CascadeType.PERSIST, CascadeType.MERGE}) sollte funktionieren, wenn Sie Setup richtig in den Feldern, wenn Sie nicht, können Sie leiden von kreisförmigen Referenzen ...
  • und ich würde lieber GenerationType.SEQUENCE verwenden, weil AUTO wie eine Blackbox ist. Sie werden nicht genau wissen, was passiert ... (z. B. Oracle wird eine Sequenz erstellen, um einen eindeutigen Primärschlüssel bereitzustellen)
Verwandte Themen