Pergunta

Eu estou tentando criar um aplicativo bastante simples e estou recebendo-me um pouco confuso com a definição de objetos de entidade e valor do Hibernate (conforme definido no capítulo 4 do Java Persistence com Hibernate).

O que eu tenho é um aplicativo com os clientes, que podem fazer pedidos (relação um para muitos). Cada uma dessas ordens tem muitas linhas de ordem (também um para muitos). Agora, eu acho que os clientes têm de identidade (número de cliente) e assim fazer encomendas (números de ordem) para que eles são, portanto, objetos de entidade? Minha confusão entra com as linhas de pedidos.

Uma linha de ordem tem quantidade, número do produto e preço. Uma linha de pedido não pode existir sem sua ordem e não tem identidade própria, portanto, eu vejo isso como um objeto de valor. Mas eu não posso fazer linha de pedido de uma parte da tabela de ordem que há uma relação um para muitos entre uma ordem e suas linhas de pedidos. Como fazer um para muitos relacionamentos de trabalho com a definição de um objeto de valor? Do livro Hibernate:

"Um objeto do tipo valor não tem identidade de banco de dados;. Pertence a uma instância entidade e seu estado persistente é incorporado na linha da tabela da entidade dona Tipos de valor não têm identificadores ou identificador propriedades"

Se alguém pode esclarecer a minha confusão eu realmente aprecio isso:)

Foi útil?

Solução

documentação do Hibernate faz uma distinção entre Entidade Tipo e Valor Tipo , não o valor objeto.

  • Objeto de Tipo de Entidade: tem sua própria identidade de banco de dados
  • Objeto de Valor Tipo: pertence a uma entidade, e seu estado persistente é incorporado na linha da tabela da entidade proprietária. Tipos de valor não têm identificadores ou identificador propriedades.

Tanto quanto me lembro, o livro usa uma amostra com um address representado como um único String e um objeto user, que contém uma cadeia de endereço:

  • implementado como um tipo de valor (o que normalmente significa uma coluna na mesma mesa ao nível da base de dados), se o utilizador é eliminado, então também o é o respectivo endereço. O endereço não pode viver sem o usuário e não pode ser compartilhado.

  • Implementado como um tipo de entidade (que provavelmente meios que utilizam uma tabela separada), existiriam os endereços em seu próprio direito, sem o usuário e dois usuários seriam capazes de compartilhar o mesmo endereço.

No seu caso, uma linha de pedido não pertence a uma ordem, seu estado persistente não é incorporado na linha de ordem (que não faz sentido), tem a sua própria identidade (feito da orderId e productId) . linha de pedido não é definitivamente um tipo de valor, é um tipo de entidade.

Na verdade, assim que você está pensando em termos de associações (um-para-um, um-para-muitos, etc), você é para entidades manipuladoras certeza.

Outras dicas

Eu acho que o que você tem é uma questão ORM bastante genérica.

Você mencionou " uma linha de pedido não pode existir sem a sua ordem e não tem identidade própria ".
Bem, embora OrderLine não pode existir com uma ordem, não significa que ele não pode ter uma identidade.

Leve a sua entidade Ordem, ele pode não existe sem um cliente, mas você já considerou como uma entidade, sim?

Então, aqui vai uma sugestão para entidades:
- Cliente (pode ter nenhum ou mais entidades ordem)
- Ordem (pode ter uma ou mais entidades OrderLine)
- OrderLine

Eu acho que você está procurando um elemento composto. Há um exemplo na referência de que, na verdade, utiliza Ordem e purchasedItems (linhas de ordem). Quando Hibernate diz que não pode ficar sozinho, isso não significa que ele não pode ter a sua própria mesa, só que é sempre associado com o elemento pai:

<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: Coleções de dependentes objetos

valor do objeto é um pequeno objeto que representa uma entidade simples, cuja igualdade não é baseada em identidade: isto é, dois objetos de valor são iguais quando têm o mesmo valor, não necessariamente sendo o mesmo objecect

Você pode fazer a ordem de linhas como o tipo de valor e tipo de valor é suportada com o mapeamento um-para-um, bem como um-para-muitos mapeamento. Obviamente Java Collections são usados ??para mapear a relação * -para-muitos tipo de valor com entity.Inside de recolha adequado, e elemento compósito-elemento são utilizados conforme necessário e está descrito abaixo: Para um-para muitos relação entre a entidade e tipo de valor (tipo não JDK), compósito-elemento é utilizado. Por um-para-muitos relação em que tipo de valor de tabela é para conter um único atributo do tipo JDK (string digamos), elemento é usado. Este conceito é dado no capítulo 6 da persistência Java com Hibernate. Para mais detalhes, consulte este link https://docs.jboss.org/hibernate/orm /3.5/reference/en/html/components.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top