2017-11-10 65 views
0

@Antoniossss休眠更新子表而不是将记录追加到子表

记录正在插入到Wslog表中,但正在为Emp错误。它也试图插入对象wslog。

insert into wslog (totrecords, logid) values (?, ?) 
insert into emp (sid, logid, **wslog**, eid, ename) values (?, ?, ?, ?, ?, ?, ?) 

WsLog(主)

@Column(name = "logid") //has sequence 
private long logid; 
@Column(name = "totrecords") 
private long totrecords; 
@OneToMany(mappedBy="wslog") 
private List<Emps> emplist; 

EMPS(儿童)

@Id 
    @Column(name = "sid") //has sequence 
    private long sid; 
    @Column(name = "logid") 
    private long logid; 
    @Column(name = "eid") 
    private Long eid; 
    @Column(name = "ename") 
    private String ename; 
    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "logid") 
    private Wslog wslog; 

Repositiory

public interface WsLogRepository extends CrudRepository<WsLog, Long> { 

} 

服务实现

my.domain.client.model.Wslog wsLog = new Wslog(); 
    wsLog.setTotrecords(getTotrecords()); 
    List<my.domain.client.model.Employees> empList = new ArrayList<my.domain.client.model.Employees>(); 
    for (my.domain.client.model.Employees emp : getEmployees()) { 
     my.domain.client.model.Employees emps = new Employees();    
     emps.setID(getEid()); 
     emps.setEname(getEname()); 
     emps.setLog(wsLog); 
     empList.add(emps); 
    } 
    wsLog.setEmployees(empList); 
    wsLogRepository.save(wsLog); 
+0

哪一列是emp表中的主键? – FuSsA

+0

为什么你会设置'LogId'保证'Log'对象是另一个神秘的 – Antoniossss

回答

0

你的映射是错误的,

EMP

@ManyToOne 
@JoinColumn(name = "logid") 
private WsLog log; 

WsLog

@OneToManny(mappedBy="log) 
private List<Emp> employees; 

这是你如何让关系

Employee emp=new Employee(); 
emp.setLog(log); // log is of type WsLog ofcourse 

你不手动设置IDS等 还有R请记得使用@Id注释上的标识符字段。

+0

我仍然有问题。我用更新后的代码修改了我的主POST。 – rookieDeveloper