Ich habe in meinem Projekt eine Klasse
@Entity
@Table(name="user")
public class User implements IEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@ManyToOne
// @JoinColumn(name = "created_by", referencedColumnName = "id")
private User created_by;
@OneToMany(mappedBy = "created_by")
private Collection<User> created_children;
@Column(name="created_at")
@Temporal(TemporalType.TIMESTAMP)
private Date createdAt;
@ManyToOne
private User modified_by;
...
Ich habe es mit den auskommentierten
@JoinColumn(name = "modified_by", referencedColumnName = "id")
@Column(name = "modified_by")
bzw. den entsprechenden für created_by ausprobiert. Ich habe es auch ohne JoinColumn bzw Column probiert allerdings alle drei Sachen führen zu einem Fehler z.B.
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'CREATED_BY_id' in 'field list'
created_by / modified_by (so stehen sie in der Tabelle) sollen in der Klasse wegen dem Unterstrich createdBy bzw. modifiedBy heisen. Created / Modified darf null sein oder sich selbst referenzieren. Die entpsrechenden Spalten in der Datentabelle können entsprechend Null aufnehmen.
Falls es für euch wichtig ist hier noch die Speicherfunktion der DAO
public void save(IEntity entity, User user) {
if (_find(User.class, entity.getId()) == null ) {
entity.setCreatedBy(user);
entity.setCreatedAt(new Date());
_insert(entity);
} else {
entity.setModifiedBy(user);
entity.setModifiedAt(new Date());
_update(entity);
}
}
Kann mir bitte einer sagen wie die Entity - Klasse korrekt lauten müsste?
P.S.
Ja ich weis evtl. müsste ich die speicherfunktion noch umschreiben, weil wenn er sich selbst referenziert muss ggf. erstmal die neue ID der gespeicherten Entity erhalten, oder kann dieses auch die JPA / EclipseLink übernehmen?