I持ってJava EEアプリケーションの次のモデルオブジェクト:JPA持たないEJBException IDがEntityManager.persist()にnullである
Person.java
@Entity
@Table(name = "person")
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_person")
private Integer idPerson;
// some other fields (name, birthdate, etc.)
@OneToOne(cascade = CascadeType.ALL, mappedBy = "person")
private User user;
// Constructors, get/set, etc.
User.java
@Entity
@Table(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id_person") // Because it's a FK
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer idPerson;
// some other fields (username, etc)
@JoinColumn(name = "id_person", referencedColumnName = "id_persona", insertable = false, updatable = false)
@OneToOne(optional = false, cascade = CascadeType.PERSIST)
private Person person;
// Constructors, get/set, etc.
ManagedBean
は、次のとおりです。
UserController.java
@ManagedBean(name = "usuarioController")
@ViewScoped
public class UsuarioController implements Serializable{
private static final long serialVersionUID = 7002352152240769558L;
@EJB
private UserFacadeLocal userEJB;
private Person person;
private User user;
@PostConstruct
public void init() {
person = new Person();
user = new User();
}
// getters/setters
public void register(){
try{
this.user.setPerson(person);
this.person.setUser(user); // BreakPoint 1
userEJB.create(user);
// Success Message
} catch (Exception e){ // Breakpoint 2
// Error message
}
}
User
とPerson
オブジェクトは、JSFページで<h:form>
で満たされています。プログラムのデバッグ私はBreakpoint 1
に、person.idPerson
とuser.idPerson
の両方のフィールドがNULLであることが分かります。 Breakpoint 2
person.idPerson
には値がありますが、user.idPerson
はまだNULLです。キャッチException
は(NetBeansでの変数の記述に従う)EJBException
であり、メッセージは次のとおり
Error Code: 1048
Call: INSERT INTO user (id_person, ...) VALUES (?, ?, ?, ?, ?)
bind => [5 parameters bound]
Query: InsertObjectQuery(model.User[ idPerson=null ])
...stacktrace...
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id_person' cannot be null
問題がどこにあるか、私は見つけることができません。私はJDK 1.8、JSF 2.2、およびPersistence ProviderとしてのEclipseLink2.5.2とともにJavaEE 7を使用しています。
何か助けていただければ幸いです。事前に感謝
ユーザーの –
申し訳ありませんが、翻訳エラーです。あなたは 'usuario'(スペイン語のユーザ)を読む' user'でなければなりません。通常、私は変数の目的をよりよく「国際的に理解する」ために変数名を「翻訳」します。私は今それを変更します –