首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在hibernate介绍性项目中遇到了NonUniqueObjectException错误

我在hibernate介绍性项目中遇到了NonUniqueObjectException错误
EN

Stack Overflow用户
提问于 2020-06-22 01:57:44
回答 1查看 28关注 0票数 0

我是Java Hibernate的新手。我在我的代码中得到了以下错误。我正在尝试实现多对多关系,我在谷歌上搜索并理解了这个概念,但我无法为像我这样的初学者找到合适的实现。提前谢谢。

Students.java

代码语言:javascript
复制
@Entity
@Table
public class Students 
{
    
    @Id
    private int roll_no;
    private float marks;
    private String name;
    
    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
            name = "mobiles_students", 
            joinColumns = { @JoinColumn(name = "roll_no") }, 
            inverseJoinColumns = { @JoinColumn(name = "mob_id") }
            )
    private List<Mobiles> mobile = new ArrayList<Mobiles>();
            // Getters, Setters

Mobiles.java

代码语言:javascript
复制
@Entity
public class Mobiles 
{
    @Id
    private int mob_id;
    private String mobile;
    
    @ManyToMany(mappedBy = "mobile")
    private List<Students> studs = new ArrayList<Students>();
    // Getters, Setters

App.java

代码语言:javascript
复制
public class App 
{
    public static void main( String[] args )
    {
        
        Configuration con = new Configuration().configure().addAnnotatedClass(Students.class).addAnnotatedClass(Mobiles.class);
        SessionFactory factory = con.buildSessionFactory();
        Session session = factory.openSession();
        Transaction t = session.beginTransaction();
        
        
        Mobiles mobile1  = new Mobiles();
        mobile1.setMob_id(3);
        mobile1.setMobile("Redmi K20");
        

        Mobiles mobile2  = new Mobiles();
        mobile2.setMob_id(3);
        mobile2.setMobile("Nokia 6.1 Plus");
        

        Students stud1 = new Students();
        stud1.setRoll_no(3);
        stud1.setMarks(100);
        stud1.setName("Vivek");
        
        List<Mobiles> mob = new ArrayList<Mobiles>();
        mob.add(mobile1);
        mob.add(mobile2);
        stud1.setMobile(mob);
//      stud1.getMobile().add(mobile1);
//      stud1.getMobile().add(mobile2);
//      mobile1.getStuds().add(stud1);      
//      mobile2.getStuds().add(stud1);
    
        
        
//      Students stud = (Students)session.get(Students.class, 1);
        session.save(mobile1);
        session.save(mobile2);
        session.save(stud1);
        t.commit();
//      System.out.println(stud);
    }
}

错误

代码语言:javascript
复制
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Exception in thread "main" org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session : [com.vivek.NewJavaApp.Mobiles#3]
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:135)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:194)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:179)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:75)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:634)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:627)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:622)
    at com.vivek.NewJavaApp.App.main(App.java:52)
EN

回答 1

Stack Overflow用户

发布于 2020-06-22 03:37:03

在您的Mobiles实体类字段中,mob_id被标注为@Id。使用@Id注释的字段通常应该被赋予一个惟一的值(通常也可以通过自动生成该值)。在主应用程序App.java中,您需要手动将mob_id属性设置为相同的值3两次。这会导致引发NonUniqueObjectException

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62502483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档