개체를 삽입하고 내 데이터베이스에있는 세 개의 테이블 (사용자, 계정 및 AccountActivity)이 없습니다 :ConstraintViolationException : 나는 뱅킹 애플리케이션을 구현하고
Account
및 AccountActivity
클래스의 구현은 다음과 같을를 :
@MappedSuperclass public abstract class AbstractDomain implements Serializable {
@Id @GeneratedValue
private long id = NEW_ID;
public static long NEW_ID = -1;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public boolean isNew() {
return id==NEW_ID;
}
}
@Table(name="ACCOUNT_ACTIVITY")
@Entity
public class AccountActivity extends AbstractDomain {
@Column(name="NAME")
private String Name;
@Column(name="XDATE")
private Date Date;
@Column(name="VALUE")
private double Value;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="ACCOUNTID")
private Account ACCOUNT;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="OTHERACCOUNTID")
private Account OTHERACCOUNT;
public String getName() {
return Name;
}
// ...
}
그리고 :
@Table(name="ACCOUNT")
@Entity
public class Account extends AbstractDomain {
@Column(name="NAME")
private String Name;
@Column(name="XDATE")
private Date Date;
@Column(name="VALUE")
private double Value;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="USERID")
private User USER;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private List<AccountActivity> AccountActivity = new ArrayList<AccountActivity>();
// ...
}
,451,515,
내 데이터베이스에 새 계정을 저장하려면 내가 이것을 사용
내 데이터베이스에 새 계정을 저장하기 위해 노력public Account storeAccount(Account ac) {
User x = ac.getUser();
x = em.merge(x);
ac = em.merge(ac);
return ac;
}
.
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private List<AccountActivity> AccountActivity = new ArrayList<AccountActivity>();
: 나는 계정 활동 정보가 추가 된 정보 (계정 활동) 업데이트됩니다 계정 이미 저장된 계정, 에 추가 될 때이 코드 조각을 사용하여 AccountActivity 테이블에 계단식되는 기능을 구현하고 싶었다
이
java.sql.SQLException: Integrity constraint violation -no parent FK670B7D019607336A table: ACCOUNT_ACTIVITY in statement
아무도이 문제를 좀 도와 줄래 :이 코드를 테스트 할 때
나는 오류를 얻을?
갱신 내가 JUnit을 코드의 조각을 테스트
는 :
public void testAddAccountActivities() {
User user = dummyPersistedUser();
User user2 = dummyPersistedUser();
Account account = getTestUtils().dummyEmptyAccount(user);
Account account2 = getTestUtils().dummyEmptyAccount(user2);
account=accountManager.storeAccount(account);
account2=accountManager.storeAccount(account2);
getTestUtils().fillAccounts(account, account2);
accountManager.storeAccount(account);
accountManager.storeAccount(account2);
assertEquals(2,accountManager.getAccount4Name(account.getName()).getAccountActivity().size());
assertEquals(2,accountManager.getAccount4Name(account2.getName()).getAccountActivity().size());
}
는 fillAccounts(account, account2)
는 그래프 :
AccountActivity aa = new AccountActivity();
aa.setDate(new Date());
aa.setName("test activity");
aa.setAccount(a1);
aa.setValue(value);
aa.setOtherAccount(a2);
account.addAccountActivity(aa)
엔티티 클래스의 @Id 정의는 어디에 있습니까? – Perception
그 @ID 정의가 AbstractDomain 클래스에서 상속되었음을 언급하는 것을 잊었습니다. (업데이트 된 질문 버전 참조) – Consec
테스트 코드를 알려주십시오. 응용 프로그램을 어떻게 테스트합니까? – WeMakeSoftware