Pregunta

Estoy tratando de diseñar una aplicación bastante simple y estoy recibiendo a mí mismo un poco confundido con la definición de hibernación de la entidad y de valor objetos (como se define en el Capítulo 4 de Java Persistence con Hibernate).

Lo que tengo es una aplicación con los clientes, que pueden hacer pedidos (uno a muchos). Cada una de estas órdenes tiene muchas líneas de pedidos (también uno a muchos). Ahora, creo que los clientes tienen identidad (número de cliente) y también lo hacen pedidos (números de orden) por lo que son, por lo tanto objetos de entidad? Mi confusión llega con las líneas de pedido.

Una línea de pedido tiene la cantidad, número de producto y precio. Una línea de pedido no puede existir sin su fin y no tiene identidad propia, por lo tanto, lo veo como un objeto de valor. Pero no puedo hacer línea para una parte de la tabla de orden ya que no está a muchos relación entre un pedido y sus líneas de pedido. ¿Cómo hacer relaciones uno a muchos trabajan con la definición de un objeto de valor? Del libro de hibernación:

  

"Un objeto de tipo de valor no tiene identidad de base de datos;. Pertenece a una instancia de entidad y su estado persistente está incrustado en la fila de tabla de la entidad propietaria tipos de valor no tienen identificadores o propiedades identificador"

Si alguien puede aclarar mi confusión me lo agradecería muchísimo:)

¿Fue útil?

Solución

documentación de Hibernate hace una distinción entre los del tipo de entidad y Tipo de valor , no el valor del objeto.

  
      
  • Objeto de Entidad Tipo: tiene su propia identidad base de datos
  •   
  • Objeto de Valor Tipo: pertenece a una entidad, y su estado persistente está incrustada en la fila de la tabla de la entidad propietaria. Los tipos de valor no tienen identificadores o propiedades identificadoras.
  •   

Por lo que yo puedo recordar, el libro utiliza una muestra con un address representado como una sola cadena y un objeto user, que contiene una cadena de dirección:

  • Implementado como un tipo de valor (que normalmente significa una columna en la misma tabla en el nivel de base de datos), si se elimina el usuario, entonces también lo es su dirección. La dirección no puede vivir sin que el usuario y no puede ser compartida.

  • Implementado como un tipo de entidad (que probablemente significa utilizar una tabla separada), existirían las direcciones en su propio derecho sin que el usuario y dos usuarios serían capaces de compartir la misma dirección.

En su caso, una línea de pedido no pertenece a una orden, su estado persistente no está incrustado en la fila de orden (no tiene sentido), que tiene su propia identidad (hecho de la orderId y productId) . línea de orden no es definitivamente un tipo de valor, es un tipo de entidad.

En realidad, tan pronto como se está pensando en términos de asociaciones (uno a uno, uno a varios, etc.), que son para la manipulación de entidades de seguros.

Otros consejos

Creo que lo que tenemos es una pregunta ORM bastante genérico.

Se ha mencionado " Una línea de pedido no puede existir sin su fin y no tiene identidad propia ".
Bueno, aunque OrderLine no puede existir con una Orden, no significa que no puede tener una identidad.

Tome su entidad Order, no puede existe sin un cliente, pero que ya se considera como una entidad, sí?

Por lo tanto, he aquí una sugerencia para entidades:
- Cliente (puede tener ninguno o más entidades Order)
- Orden (puede tener una o más entidades OrderLine)
- OrderLine

Creo que estás en busca de un elemento compuesto. Hay un ejemplo en la referencia que se utiliza realmente Orden y purchasedItems (líneas de pedido). Cuando Hibernate dice que no puede estar solo, esto no significa que no puede tener su propia mesa, sólo que su siempre asociado con el elemento padre:

<class name="eg.Order" .... >
  ....
  <set name="purchasedItems" table="purchase_items" lazy="true">
    <key column="order_id"/>
    <composite-element class="eg.Purchase">
      <property name="purchaseDate"/>
      <property name="price"/>
      <property name="quantity"/>
      <many-to-one name="item" class="eg.Item"/>
    </composite-element>
  </set>
</class>

De: Colecciones de dependientes objetos

valor de objeto es un pequeño objeto que representa una entidad sencilla cuya igualdad no se basa en la identidad: es decir, dos objetos de valor son iguales cuando tienen el mismo valor, no ser necesariamente el mismo objecect

Usted puede orden líneas como tipo de valor y tipo de valor es compatible con la asignación uno a uno, así como uno-a-muchos de mapeo. Obviamente colecciones de Java se utilizan para mapear la relación *-: para muchos de tipo de valor con entity.Inside de recogida adecuado, elemento y elemento compuesto se utilizan según se requiera y se describe a continuación: Para uno-a-muchos relación entre entidad y tipo de valor (tipo no JDK), composite-element se utiliza. Para uno-a-muchos relación en la tabla de tipo de valor es contener un único atributo de tipo JDK (dicen cadena), elemento se utiliza. Este concepto se da en el capítulo 6 de la persistencia de Java con Hibernate. Para detalles, consulte este enlace https://docs.jboss.org/hibernate/orm /3.5/reference/en/html/components.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top