• 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

  • 相关阅读:
    Linux配置手记及软件FAQ-更新到Fedora core 3
    怎样给多维数组动态分配内存
    mysql管理密码修改及管理权限设定(zz)
    链表处理函数(自己总结)
    二级C笔试试题
    中央广播电视大学19992000学年度第二学期“开放教育(本科)期末考试计算机科学与技术专业数据结构试题
    关闭计算机就这几招
    交大ftp校内搜索引擎终于好了!好!!
    有趣的Baidu。终于发现点比Google好的地方了
    几组重要概念
  • 原文地址:https://www.cnblogs.com/softidea/p/6294445.html
Copyright © 2020-2023  润新知