zoukankan      html  css  js  c++  java
  • Java Persistence/ManyToMany

    ManyToMany relationship in Java is where the source object has an attribute that stores a collection of target objects and (if) those target objects had the inverse relationship back to the source object it would also be a ManyToManyrelationship. All relationships in Java and JPA are unidirectional, in that if a source object references a target object there is no guarantee that the target object also has a relationship to the source object. This is different than a relational database, in which relationships are defined through foreign keys and querying such that the inverse query always exists.

    JPA also defines a OneToMany relationship, which is similar to a ManyToMany relationship except that the inverse relationship (if it were defined) is a ManyToOne relationship. The main difference between a OneToMany and a ManyToManyrelationship in JPA is that a ManyToMany always makes use of a intermediate relational join table to store the relationship, where as a OneToMany can either use a join table, or a foreign key in target object's table referencing the source object table's primary key.

    In JPA a ManyToMany relationship is defined through the @ManyToMany annotation or the <many-to-many> element.

    All ManyToMany relationships require a JoinTable. The JoinTable is defined using the @JoinTable annotation and <join-table> XML element. The JoinTable defines a foreign key to the source object's primary key (joinColumns), and a foreign key to the target object's primary key (inverseJoinColumns). Normally the primary key of the JoinTable is the combination of both foreign keys.

    Example of a ManyToMany relationship database[edit]

    EMPLOYEE (table)

    ID FIRSTNAME LASTNAME
    1 Bob Way
    2 Sarah Smith

    EMP_PROJ (table)

    EMP_ID PROJ_ID
    1 1
    1 2
    2 1

    PROJECT (table)

    ID NAME
    1 GIS
    2 SIG

    Example of a ManyToMany relationship annotation[edit]

    @Entity
    public class Employee {
      @Id
      @Column(name="ID")
      private long id;
      ...
      @ManyToMany
      @JoinTable(
          name="EMP_PROJ",
          joinColumns=@JoinColumn(name="EMP_ID", referencedColumnName="ID"),
          inverseJoinColumns=@JoinColumn(name="PROJ_ID", referencedColumnName="ID"))
      private List<Project> projects;
      .....
    }
    

    Example of a ManyToMany relationship XML[edit]

    <entity name="Employee" class="org.acme.Employee" access="FIELD">
    	<attributes>
    		<id name="id">
    			<column name="EMP_ID"/>
    		</id>
    		<set name="projects" table="EMP_PROJ" lazy="true" cascade="none" sort="natural" optimistic-lock="false">
    			<key column="EMP_ID" not-null="true" />
    			<many-to-many class="com.flipswap.domain.Project" column="PROJ_ID" />
    		</set>
    	</attributes>
    </entity>

    https://en.wikibooks.org/wiki/Java_Persistence/ManyToMany

  • 相关阅读:
    [转] 敏捷软件开发 Agile Software Development
    Concurrent Framework Synchronizer 同步器: Easy to use but easy to make dead lock as well
    Concurrent Framework Timer
    JavaScript Return Object.Type
    Js AJAX Event
    js Functor Copy
    多线程19-线程池批量插入线程
    多线程18-QueueUserWorkItem
    多线程17-Async Programming Model
    多线程16-SpinWait
  • 原文地址:https://www.cnblogs.com/softidea/p/6294445.html
Copyright © 2011-2022 走看看