gpt4 book ai didi

java - Hibernate 多对多映射未保存在数据透视表中

转载 作者:行者123 更新时间:2023-11-30 09:55:20 26 4
gpt4 key购买 nike

我在将多对多关系保存到数据透视表时遇到问题。

不幸的是,pojo 的创建方式是一个相当长的过程,它跨越几个不同的线程,这些线程在(到目前为止未保存的)对象上工作,直到它最终被持久化。我在创建相关对象后立即将它们相互关联,并且在调试时我可以看到相关对象列表中填充了它们各自的对象。所以到目前为止基本上一切都很好。当我持久化该对象时,除了数据透视表中的关系外,所有内容都会被保存。

映射文件:

<?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.thebeansgroup.jwinston.plugin.orm.hibernate.object">
<class name="ShowObject" table="show_object">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<set cascade="all" inverse="true" name="venues" table="venue_show">
<key column="show_id"/>
<many-to-many class="VenueObject"/>
</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.thebeansgroup.jwinston.plugin.orm.hibernate.object">
<class name="VenueObject" table="venue_object">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="latitude" type="integer"/>
<property name="longitude" type="integer"/>
<set cascade="all" inverse="true" name="shows" table="venue_show">
<key column="venue_id"/>
<many-to-many class="ShowObject"/>
</set>
</class>
</hibernate-mapping>

任务:

public class ShowObject extends OrmObject
{

private Long id;
private String name;
private Set venues;

public ShowObject()
{
}

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;
}

public Set getVenues()
{
return venues;
}

public void setVenues(Set venues)
{
this.venues = venues;
}
}

和另一个:

public class VenueObject extends OrmObject
{

private Long id;
private String name;
private int latitude;
private int longitude;
private Set shows = new HashSet();

public VenueObject()
{
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId()
{
return id;
}

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

public int getLatitude()
{
return latitude;
}

public void setLatitude(int latitude)
{
this.latitude = latitude;
}

public int getLongitude()
{
return longitude;
}

public void setLongitude(int longitude)
{
this.longitude = longitude;
}

public String getName()
{
return name;
}

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

public Set getShows()
{
return shows;
}

public void setShows(Set shows)
{
this.shows = shows;
}
}

问题可能与缺少注释有关吗?

最佳答案

一些尝试:

  1. 您在多对多的两端都有 inverse="true"。它应该只有一端。

  2. 不要偷懒。

  3. 您没有为多对多标签指定 column 属性。

所以它最后看起来应该是这样的:

<class name="ShowObject" table="show_object">
...
<set lazy="false" cascade="all" name="venues" table="venue_show">
<key column="show_id"/>
<many-to-many class="VenueObject" column="venue_id" />
</set>
</class>

<class name="VenueObject" table="venue_object">
...
<set lazy="false" cascade="all" inverse="true" name="shows" table="venue_show">
<key column="venue_id"/>
<many-to-many class="ShowObject" column="show_id"/>
</set>
</class>

关于java - Hibernate 多对多映射未保存在数据透视表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com