Oracle JPA对象映射没有';t在插入时保存子项

Oracle JPA对象映射没有';t在插入时保存子项,oracle,jpa,playframework,Oracle,Jpa,Playframework,我的Play应用程序上有这个模型 @Entity @Table(name="SHOPPER") public class User extends GenericModel { ... @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "SASHNBR", insertable = true, updatable = true) public List<Direction> direc

我的Play应用程序上有这个模型

@Entity
@Table(name="SHOPPER")
public class User extends GenericModel {

    ...

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "SASHNBR", insertable = true, updatable = true)
    public List<Direction> directions;
}
这样我就得到了一个错误,因为Direction在保存时没有生成idUser

我也试过这种方法

@Entity
@Table(name="SHOPPER")
public class User extends GenericModel {

    ...

    @OneToMany(cascade = CascadeType.ALL, mappedBy="user")
    public List<Direction> directions;
}
但它也不起作用

有人能帮我吗


谢谢!:)

请尝试以下方法:

User user = new User();
// [...] call required setters of user object
for (int i=0; i<5; i++) {
    Direction direction = new Direction();
    direction.setUser(user);
    // [...] call other required setters of direction object
    user.getDirections().add(direction);
}
entitymanager.persist(user);
User User=新用户();
//[…]调用用户对象的必需设置器

对于(inti=0;i,您需要自己拯救这些孩子。您可以查看示例

public User addDirection(Direction direction) {    
    this.directions.add(direction);
    this.save();
    return this;
}

@Override
public User save(){
    for (Direction dir : directions) {
        dir.save()
    }
    super.save()
    return this;
}

正确的JPA方法就是你在第二种方法中描述的方法。你是如何尝试持久化对象的?你是如何创建对象的?是否有任何错误消息,或者只是用户得到持久化,而不是方向?错误是我无法保存子代,因为我没有方向上的父id。这就像e foreing key mapping不起作用。即使在第二个aproach中也是如此。我使用.save()将其持久化。您不需要家长id。这将由JPA负责。您所要做的是确保您在方向列表中的所有方向实例都已设置了它们所属的用户是的,我知道JPA将自己传播它,但它不会:s:P。当它到达孩子并去保存它时,会中断,甚至不会保存parent.ORA-01400:无法在(“SHADDR.”“SASHNBR”)上进行空插入我以前尝试过,它是这样工作的。但是没有办法保存对象用户并将其子对象保存到JPA传播的父id所在的位置?我只想执行user.save()并保存方向。谢谢:)您只保存了用户(entitymanager.persist)…这完全取决于添加方向的方式和位置。您可以将for循环中的所有步骤都放在用户对象的“addDirection”方法中,然后在保存时只需为用户调用persist。例如,在用户类中:void addDirection(Direction Direction){Direction.setUser(this);directions.add(direction);}必须尝试此方法,完成后将发表评论。感谢@korgini所做的一切。我以前尝试过它,而且它是这样工作的。但是没有办法保存对象用户并将其子对象保存到JPA传播的父id所在的位置?我只想执行user.save()并保存方向。谢谢:)然后您可以重写user save()方法,遍历方向并保存每个方向。感谢您的建议,但我认为可能有一种方法可以做到这一点,而无需遍历子方向。如果我做不到,我就用这个
User user = new User();
// [...] call required setters of user object
for (int i=0; i<5; i++) {
    Direction direction = new Direction();
    direction.setUser(user);
    // [...] call other required setters of direction object
    user.getDirections().add(direction);
}
entitymanager.persist(user);
public User addDirection(Direction direction) {    
    this.directions.add(direction);
    this.save();
    return this;
}

@Override
public User save(){
    for (Direction dir : directions) {
        dir.save()
    }
    super.save()
    return this;
}