2012-12-04 2 views
0

개체를 삽입하고 내 데이터베이스에있는 세 개의 테이블 (사용자, 계정 및 AccountActivity)이 없습니다 :ConstraintViolationException : 나는 뱅킹 애플리케이션을 구현하고

database schema fragment

AccountAccountActivity 클래스의 구현은 다음과 같을를 :

@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) 
+1

엔티티 클래스의 @Id 정의는 어디에 있습니까? – Perception

+0

그 @ID 정의가 AbstractDomain 클래스에서 상속되었음을 언급하는 것을 잊었습니다. (업데이트 된 질문 버전 참조) – Consec

+0

테스트 코드를 알려주십시오. 응용 프로그램을 어떻게 테스트합니까? – WeMakeSoftware

답변

-1

으로 추가해야합니다 일부 AccountActivities을 삽입하는 경우 첫 번째 관찰, 나는 당신이 변수 이름을 클래스와 같게해서는 안된다고 생각한다. 따라서이 개인 목록 대신 <AccountActivity> AccountActivity와 같이 개인 목록 <AccountActivity> accountActivity와 같은 것을 쓸 수 있습니다.

0
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER) 
@JoinColumn(name ="accountid") // you have several references from AccountActivity to Account. You need to specify the join column in this case. 
private List<AccountActivity> AccountActivity = new ArrayList<AccountActivity>(); 
+0

joincolumn을 지정할 때 같은 오류가 발생합니다. – Consec

관련 문제