私は自分が間違っていることを理解できませんでした
原因: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列 'USER_ID' を null にすることはできません
ユーザーとドキュメント ID は自動インクリメント ... @GeneratedValue(strategy = GenerationType.IDENTITY)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
..
}
... また ...
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
..
}
働かないで
@Stateless
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class DocumentService implements Serializable {
@Inject
@LoggedIn
private User currentUser;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public Document add(Document document) throws BusinessException {
if (document.isTransient()) {
System.out.println("dao " + currentUser); // print user correct
document.setUser(currentUser);
}
System.out.println("dao " + d.getUser()); // print user correct
return dao.save(document);
}
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class DAO<T extends BaseEntity> implements Serializable {
private static final long serialVersionUID = 1L;
private final Class<T> entityClass;
private EntityManager entityManager;
public DAO(Class<T> entityClass, EntityManager entityManager) {
this.entityClass = entityClass;
this.entityManager = entityManager;
}
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public T save(T entity) {
Document d = (Document) entity;
System.out.println("dao " + d.getUser()); // print user correct
System.out.println("contains " + entityManager.contains(entity)); // return false
if (entity.isNew()) {
entityManager.persist(entity); // persist error USER_ID is null
entityManager.flush();
} else {
entityManager.merge(entity);
}
return entity;
}
}
public class Document {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@NotNull
@ManyToOne
private User user;
}
the relationship is unidirectional Document for User
stack.. 20:30:02,917 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (デフォルト タスク 6) SQL エラー: 1048、SQLState: 23000 20:30:02,917 ERROR [org.hibernate.engine.jdbc .spi.SqlExceptionHelper] (デフォルトのタスク 6) 列 'USER_ID' を null にすることはできません 20:30:02,930 エラー [org.jboss.as.ejb3.invocation] (デフォルトのタスク 6) JBAS014134: コンポーネント DocumentService で EJB 呼び出しが失敗しましたメソッド public com.taskboard.model.Document com.taskboard.boundary.DocumentService.save(com.taskboard.model.Document) は、com.taskboard.core.exception.BusinessException: javax.ejb.EJBException: javax.persistence.PersistenceException: をスローします。 org.hibernate.exception.ConstraintViolationException: ステートメントを実行できませんでした