2013-04-17 4 views
0

У меня есть 2 объекта: Маршруты и Хосты. Хосты имеет поле FK route_id, ссылающееся на Маршруты PK также называется route_id. Я создаю объект Маршруты и добавляйте Хосты Объектов к его hostCollection. Затем я сохраняю Маршруты объект. Оба первичных ключа генерируются правильно, новые Маршруты запись в порядке, но У хозяев запись имеет NULL в поле route_id. Что я делаю не так?Каскад Openjpa сохраняется на чужой ключ до нуля

Routes.java:

@Entity 
public class Routes implements Serializable { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ROUTE_ID") 
    private long routeId; 

    @Column(name="MSG_QUEUE_NAME") 
    private String msgQueueName; 

    @Column(name="RECEIPT_QUEUE_NAME") 
    private String receiptQueueName; 

    @Column(name="QM_NAME") 
    private String qmName; 

    @OneToMany(mappedBy="routeId", cascade={CascadeType.PERSIST,CascadeType.REMOVE}) 
    private Set<Hosts> hostsCollection; 

    private static final long serialVersionUID = 1L; 

    public Routes(String mqMgrName, String msgQName, String receiptQName, Set<Hosts> newHosts) 
    { 
     this.qmName = mqMgrName; 
     this.msgQueueName = msgQName; 
     this.receiptQueueName = receiptQName; 
     this.hostsCollection = newHosts; 
    } 
    ... 
} 

Hosts.java:

@Entity 
public class Hosts implements Serializable { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="HOST_ID") 
    private long hostId; 

    @Column(name="HOST_NAME") 
    private String hostName; 

    @Column(name="KEEP_MSG") 
    private String keepMsg; 

    @Column(name="SEND_RCPT") 
    private String sendRcpt; 

    @ManyToOne(cascade=CascadeType.PERSIST) 
    @JoinColumn(name="ROUTE_ID", referencedColumnName="ROUTE_ID") 
    private Routes routeId; 

    @OneToMany(mappedBy="hostId") 
    private Set<Users> usersCollection; 

    public Hosts(String hostName, String keepMsg, String sendRcpt) 
    { 
     this.hostName = hostName; 
     this.keepMsg = keepMsg; 
     this.sendRcpt = sendRcpt; 
    } 
    ... 
} 

Создание объектов:

public String createNewHost() 
{ 
    Set<Hosts> newHosts = new HashSet<Hosts>(); 
    Hosts newHost = new Hosts(this.hostName, this.keepMsg, this.sendRcpt); 
    newHosts.add(newHost); 
    Routes newRoute = new Routes(this.mqMgrName, this.msgQName, this.receiptQName, newHosts); 
    dataBean.setCurrentRoute(newRoute); 
    return "ok"; 
} 

сохраняющиеся объекты:

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
public void setCurrentRoute(Routes currentRoute) { 
    em.persist(currentRoute); 
    em.flush(); 
} 

ответ

0

На Routes.hosts вы имеете mappedBy = "routeId", что означает, что владение стороной отношения является Host.

Поэтому, если вы не установили связь с Host, это не будет сохраняться.

Смежные вопросы