Cómo persistir dos entidades con JPA

Estoy usando el JPA en mi aplicación web y no puedo entender cómo persistir dos nuevas entidades que se relacionan entre sí. Aquí un ejemplo:

Estas son las dos entidades.
+-----------------+   +--------------------+
|     Consumer    |   |   ProfilePicture   |
+-----------------+   +--------------------+
| id    (PK)      |---| consumerId (PPK+FK)|
| userName        |   | url                |
+-----------------+   +--------------------+

losConsumidor tiene uncarné de identidad y algunos otros valores losFoto de perfil usa elConsumidor'scarné de identidad como su propia clave primaria y como clave externa. (Dado que ProfilePicture no existirá sin un Consumidor y no todos los Consumidores tienen ProfilePicture)

Usé NetBeans para generar las clases de entidad y los beans de sesión (fachadas).

Así es como se ven en resumen

Consumer.java

@Entity
@Table(name = "Consumer")
@NamedQueries({...})
public class Consumer implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;

    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "userName")
    private String userName;     

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "consumer")
    private ProfilePicture profilePicture;

    /* and all the basic getters and setters */
    (...)
}

ProfilePicture.java

@Entity
@Table(name = "ProfilePicture")
@XmlRootElement
@NamedQueries({...})
public class ProfilePicture implements Serializable {

    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "consumerId")
    private Integer consumerId;

    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "url")
    private String url;

    @JoinColumn(name = "consumerId", referencedColumnName = "id", insertable = false, updatable = false)
    @OneToOne(optional = false)
    private Consumer consumer;

    /* and all the basic getters and setters */
    (...)
}

Entonces cuando quiero crear unConsumidor con suFoto de perfil Pensé que lo haría así:

   ProfilePicture profilePicture = new ProfilePicture("http://www.url.to/picture.jpg");  // create the picture object
   Consumer consumer = new Consumer("John Doe"); // create the consumer object

   profilePicture.setConsumer(consumer);        // set the consumer in the picture (so JPA can take care about the relation      
   consumerFacade.create(consumer);             // the facade classes to persist the consumer
   profilePictureFacade.create(profilePicture);  // and when the consumer is persisted (and has an id) persist the picture
Mi problema

Intenté casi todo en cada combinación, pero JPA no parece poder vincular las dos entidades por sí solo. La mayoría de las veces recibo errores como este:

 EJB5184:A system exception occurred during an invocation on EJB ConsumerFacade, method: public void com.me.db.resources.bean.ConsumerFacade.create(com.mintano.backendclientserver.db.resources.entity.Consumer)
 (...) 
Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'. Please refer to embedded ConstraintViolations for details.

Hasta donde entiendo el problema, es porque elFoto de perfil no sabe la identificación de laConsumidor y así, las entidades no pueden persistir.

La única forma en que funcionó fue persistiendoConsumidor primero, configurando su id aFoto de perfil y luego persistiendo la imagen:

   ProfilePicture profilePicture = new ProfilePicture("http://www.url.to/picture.jpg");  // create the picture object
   Consumer consumer = new Consumer("John Doe"); // create the consumer object

   consumerFacade.create(consumer);             // the facade classes to persist the consumer
   profilePicture.setConsumerId(consumer.getId()); // set the consumer's new id in the picture     

   profilePictureFacade.create(profilePicture);  // and when the consumer is persisted (and has an id) persist the picture

Sin embargo, estas dos tablas son solo un ejemplo y, naturalmente, la base de datos es mucho más compleja y configurar los identificadores manualmente de esta manera parece muy inflexible y tengo miedo de complicar las cosas. Especialmente porque no puedo persistir todas las entidades en una transacción (lo que parece muy ineficiente).

¿Lo estoy haciendo bien? ¿O hay otra forma más estándar?

Editar: mi solución

ComoFTR sugerido, un problema era la faltaid Para elFoto de perfil mesa (utilicé elConsumer.id como extranjero y primario) ..

Las tablas se ven así ahora:

+-----------------+   +--------------------+
|     Consumer    |   |   ProfilePicture   |
+-----------------+   +--------------------+
| id    (PK)      |_  | id (PK)            |
| userName        | \_| consumerId (FK)    |
+-----------------+   | url                |
                      +--------------------+

EntoncesAlan Hay me dijo queSiempre encapsule agregar / eliminar a las relaciones y luego puede garantizar la corrección, lo cual hice:

Consumer.java

public void addProfilePicture(ProfilePicture profilePicture) {
    profilePicture.setConsumerId(this);  
    if (profilePictureCollection == null) {
        this.profilePictureCollection = new ArrayList<>();
    }
    this.profilePictureCollection.add(profilePicture);
}

Dado que ProfilePicture tiene su propia identificación ahora, se convirtió en unUno a muchos relación, por lo que cada consumidor ahora puede tener muchas imágenes de perfil. Eso no era lo que pretendía al principio, pero puedo vivir con eso :) Por lo tanto, no puedo simplemente configurar una ProfilePicture para el consumidor, sino que tengo que agregarla a una colección de imágenes (como arriba).

Este fue el único método adicional que implementé y ahora funciona. ¡Gracias, de nuevo, por toda su ayuda!

Respuestas a la pregunta(2)

Su respuesta a la pregunta