Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EclipseLink JPA不会为mysql上的多个关系创建链接表_Java_Mysql_Jpa_Eclipselink_Glassfish 4 - Fatal编程技术网

Java EclipseLink JPA不会为mysql上的多个关系创建链接表

Java EclipseLink JPA不会为mysql上的多个关系创建链接表,java,mysql,jpa,eclipselink,glassfish-4,Java,Mysql,Jpa,Eclipselink,Glassfish 4,我在两个实体级别和区域之间创建了@ManyToMany关系。我对JPA很陌生,但我的理解是,我不需要为链接表创建实体模型,但JPA应该负责 在阅读文档时,这应该是很容易实现的。我错过了什么 级别 @Entity @Table(name = "Level", schema = "demo") public class Level { private Long id; private String name; private Collection<Area> areas; publi

我在两个实体级别和区域之间创建了@ManyToMany关系。我对JPA很陌生,但我的理解是,我不需要为链接表创建实体模型,但JPA应该负责

在阅读文档时,这应该是很容易实现的。我错过了什么

级别

@Entity
@Table(name = "Level", schema = "demo")
public class Level {

private Long id;
private String name;
private Collection<Area> areas;

public Level() {
    areas = new ArrayList<Area>();
}

public Level(Long id, String name) {
    this.id = id;
    this.name = name;
}

@Id
@Column(name = "Id")
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

 @ManyToMany(cascade=CascadeType.ALL)
 @JoinTable(joinColumns={@JoinColumn(name="areaId")}, inverseJoinColumns={@JoinColumn(name="levelId")})
public Collection<Area> getAreas() {
    return areas;
}

public void setAreas(Collection<Area> areas) {
    this.areas = areas;
}

public void addArea(Area area) {
    if (areas.contains(area)) {
        areas.add(area);
    }
}
}
<persistence-unit name="Demo" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/__mySQL</jta-data-source>
    <class>fi.pelireissu.model.Club</class>
    <class>fi.pelireissu.model.Team</class>
    <class>fi.pelireissu.model.Rink</class>
    <class>fi.pelireissu.model.Game</class>
    <class>fi.pelireissu.model.StatGroup</class>
    <class>fi.pelireissu.model.Level</class>
    <class>fi.pelireissu.model.Area</class>
    <properties>
        <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
        <property name="eclipselink.logging.level" value="FINEST"/>
        <property name="eclipselink.logging.parameters" value="true"/>
    </properties>
</persistence-unit>
@实体
@表(name=“Level”,schema=“demo”)
公营班级{
私人长id;
私有字符串名称;
私人收集区;
公共级别(){
区域=新的ArrayList();
}
公共级别(长id、字符串名称){
this.id=id;
this.name=名称;
}
@身份证
@列(name=“Id”)
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@多个(级联=级联类型.ALL)
@JoinTable(joinColumns={@JoinColumn(name=“areaId”)},inverseJoinColumns={@JoinColumn(name=“levelId”)})
公共收集区(){
返回区;
}
公共区域(收集区){
这个面积=面积;
}
公共空地面积(面积){
if(区域。包含(区域)){
面积。添加(面积);
}
}
}
区域

@Entity
@Table(name = "Area", schema = "demo")
public class Area {

private Long id;
private String name;

private Collection<Level> levels;

@ManyToMany(mappedBy="areas", cascade=CascadeType.ALL)
public Collection<Level> getLevels() {
    return levels;
}

public void setLevels(Collection<Level> levels) {
    this.levels = levels;
}

public void addLevel(Level level)
{
    if (! levels.contains(level))
    {
        levels.add(level);
    }
}

public Area() {
    levels = new ArrayList<Level>();
}

public Area(Long id, String name) {
    this();
    this.id = id;
    this.name = name;
}

@Id
@Column(name = "Id")
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}
@实体
@表(name=“Area”,schema=“demo”)
公共课区{
私人长id;
私有字符串名称;
私人收藏水平;
@许多(mappedBy=“areas”,cascade=CascadeType.ALL)
公共集合getLevels(){
回报水平;
}
公共void集合级别(集合级别){
这个。级别=级别;
}
公共void addLevel(级别)
{
如果(!levels.contains(level))
{
级别。添加(级别);
}
}
公共区域(){
级别=新的ArrayList();
}
公共区域(长id、字符串名称){
这个();
this.id=id;
this.name=名称;
}
@身份证
@列(name=“Id”)
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
}
persistence.xml

@Entity
@Table(name = "Level", schema = "demo")
public class Level {

private Long id;
private String name;
private Collection<Area> areas;

public Level() {
    areas = new ArrayList<Area>();
}

public Level(Long id, String name) {
    this.id = id;
    this.name = name;
}

@Id
@Column(name = "Id")
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

 @ManyToMany(cascade=CascadeType.ALL)
 @JoinTable(joinColumns={@JoinColumn(name="areaId")}, inverseJoinColumns={@JoinColumn(name="levelId")})
public Collection<Area> getAreas() {
    return areas;
}

public void setAreas(Collection<Area> areas) {
    this.areas = areas;
}

public void addArea(Area area) {
    if (areas.contains(area)) {
        areas.add(area);
    }
}
}
<persistence-unit name="Demo" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/__mySQL</jta-data-source>
    <class>fi.pelireissu.model.Club</class>
    <class>fi.pelireissu.model.Team</class>
    <class>fi.pelireissu.model.Rink</class>
    <class>fi.pelireissu.model.Game</class>
    <class>fi.pelireissu.model.StatGroup</class>
    <class>fi.pelireissu.model.Level</class>
    <class>fi.pelireissu.model.Area</class>
    <properties>
        <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
        <property name="eclipselink.logging.level" value="FINEST"/>
        <property name="eclipselink.logging.parameters" value="true"/>
    </properties>
</persistence-unit>

org.eclipse.persistence.jpa.PersistenceProvider
jdbc/\uuuumysql
菲佩利瑞苏模特俱乐部
fi.PELIREISU.model.Team
fi.PELIREISU.model.Rink
fi.pelireissu.model.Game
fi.PELIREISU.model.StatGroup
fi.PELIREISU.model.Level
fi.PELIREISU.model.Area

它应该为您创建表“LEVEL\u AREA”,作为包含列areaId和levelId的联接表。在尝试创建表时,日志是否未显示错误?它创建了什么?如果填充或查询模型,会出现什么错误?尝试明确地命名您要使用的表:@JoinTable(name=“LEVEL_AREA”,schema=“demo”,joinColumns={@JoinColumn(name=“areaId”)},inverseJoinColumns={@JoinColumn(name=“levelId”)})我以前尝试过设置名称,但没有成功。现在,我按照您的建议添加了名称和模式,并创建了表。谢谢