Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

"Um pra um" "dentro" de uma relação "muitos pra muitos"

Boa tarde,

Sou iniciante em Hibernate e estou trabalhando com um sistema legado que utiliza apenas Hibernate sem JPA utilizando mapeamento xml.

No momento estou trabalhando com esse relacionamento muitos-para-muitos do link abaixo:

https://imgur.com/a/CE1FBM7

O mapeamento dessas entidades segue abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.xxxx.model">
    <class lazy="false" name="com.xxxxxx.model.Terminal" table="TERMINAL">
        <id column="ID" name="id" type="java.lang.Integer">
            <generator class="assigned" />
        </id>

        <property column="NAME" length="60" name="name" type="java.lang.String" />
        <property column="TERMINAL_KEY" name="terminalKey" length="120" type="java.lang.String" />
        <property column="OPENING_BALANCE" length="52" name="openingBalance" type="java.lang.Double" />
        <property column="CURRENT_BALANCE" length="52" name="currentBalance" type="java.lang.Double" />
        <property column="HAS_CASH_DRAWER" name="hasCashDrawer" type="java.lang.Boolean" />
        <property column="IN_USE" name="inUse" type="java.lang.Boolean" />
        <property column="ACTIVE" name="active" type="java.lang.Boolean" />
        <property column="LOCATION" name="location" length="320" type="java.lang.String" />
        <property column="FLOOR_ID" name="floorId" type="java.lang.Integer" />
        <!-- Associations -->
        <many-to-one class="com.xxxxxx.model.User" lazy="false" name="assignedUser">
            <column name="ASSIGNED_USER" />
        </many-to-one>

        <set name="terminalPrinters" table="terminal_printers" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="ID" not-null="true" />
            </key>
            <one-to-many class="com.xxxxxx.model.TerminalPrinters" />
        </set>

    </class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.xxxxx.model">
    <class lazy="false" name="com.xxxxx.model.TerminalPrinters" table="TERMINAL_PRINTERS">
        <id column="ID" name="id" type="java.lang.Integer">
            <generator class="identity" />
        </id>

        <many-to-one class="com.xxxxxx.model.Terminal" cascade="none" lazy="false" name="terminal">
            <column name="TERMINAL_ID" />
        </many-to-one>

        <property column="PRINTER_NAME" name="printerName" type="string" length="60" />

        <many-to-one class="com.xxxxxxx.model.VirtualPrinter" cascade="none" lazy="false" name="virtualPrinter">
            <column name="VIRTUAL_PRINTER_ID" />
        </many-to-one>

    </class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.xxxxx.model">
    <class lazy="false" name="com.xxxxxxx.model.VirtualPrinter" table="VIRTUAL_PRINTER">
        <id column="ID" name="id" type="java.lang.Integer">
            <generator class="identity" />
        </id>

        <property column="NAME" name="name" type="string" unique="true" length="60" not-null="true" />
        <property column="TYPE" name="type" type="java.lang.Integer"/>

        <bag name="orderTypeNames" table="VIRTUALPRINTER_ORDER_TYPE" lazy="false" cascade="all">
            <key column="printer_id" />
            <element column="ORDER_TYPE" type="string" />
        </bag>

        <property column="PRIORITY" name="priority" type="java.lang.Integer"/>
        <property column="ENABLED" name="enabled" type="java.lang.Boolean"/>
    </class>
</hibernate-mapping>

No sistema que estou trabalhando apenas 1 registro de terminal vai usar o "many-to-many" e os outros terminais devem estar em um relacionamento 1 pra 1, ou seja, 1 terminal pra 1 terminal_printers.

Eu sei, parece uma gambiarra...mas eu só gostaria de saber se é possível fazer isso pois não tenho a menor ideia de como implementar....

A ideia é que apenas 1 tipo de terminal(esse controle de tipo seria pelo nome do terminal que não mudaria) pudesse ter várias impressoras e os outros terminais pudessem ter apenas 1....

Alguém tem alguma ideia de como eu poderia implementar isso? Sei que parece uma gambiarra mas o sistema é um legado que queremos alterar o mínimo possível...

1 resposta
solução!

Bom dia,

Meu problema foi "resolvido" depois que foi decidido que o outro tipo de terminal também usará relacionamento muitos para muitos. Se eu tivesse a opção de excluir minha pergunta eu excluiria...acho que ela não vai ser muito útil ao pessoal do fórum. Se algum administrador quiser excluir, por mim tudo bem....