运行 spring boot 应用程序时出现问题:错误 864

时间:2021-07-15 10:44:13

标签: java spring spring-boot

我正在尝试制作一个非常简单的 spring boot java 程序,这是我所有的数据文件。

一开始,我创建了一个名为UserRepository.java的文件,这里是

package net.javaguides.springboot.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType; 
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "first_name")
private String lastName;
private String email;
public User(String firstName, String lastName, String email) {
    super();
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
}
public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}   

}

如您所见,在此文件中,我为用户创建了三个元素,名字、姓氏、电子邮件 这是 User.java 文件

package net.javaguides.springboot.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "first_name")
private String lastName;
private String email;
public User(String firstName, String lastName, String email) {
    super();
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
}
public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}   

}

这是 UserController.java 文件

package net.javaguides.springboot.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import net.javaguides.springboot.model.User;
import net.javaguides.springboot.repository.UserRepository;
@RestController
@RequestMapping("api/")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("users")
public List<User> getUsers() {
return this.userRepository.findAll();       
}
}

这里是 Thinghiem1Application.java 文件

package net.javaguides.springboot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import net.javaguides.springboot.model.User;
import net.javaguides.springboot.repository.UserRepository;
@SpringBootApplication
public class Thinghiem1Application implements CommandLineRunner{
public static void main(String[] args) {
SpringApplication.run(Thinghiem1Application.class, args);
}
@Autowired
private UserRepository userRepository;
@Override
public void run(String... args) throws Exception {
    // TODO Auto-generated method stub
    this.userRepository.save(new User("Duc", "Nguyen", "ramesh@gmail.com"));
    this.userRepository.save(new User("Long", "Hoang", "tom@gmail.com"));
    this.userRepository.save(new User("Tony", "Lan", "dir@gmail.com"));
}
}

当我写java文件时,没有错误,但是当我将java文件作为Spring Boot App运行时,它告诉我这个错误:

2021-07-15 18:52:27.051 ERROR 864 --- [           main] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: net.javaguides.springboot.model.User column: first_name (should be mapped with insert="false" update="false")

你能给我一些关于这个问题的想法吗?非常感谢您抽出宝贵时间。

4 个答案:

答案 0 :(得分:0)

您正在映射 first_name to field last_name

@Column(name = "first_name")
private String firstName;
@Column(name = "first_name")
private String lastName;

应该是这样的:

@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;

答案 1 :(得分:0)

class MyFragment : Fragment{

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return super.onCreateView(inflater, container, savedInstanceState)
        initPager()
    }
    
    var fragmentAdapter: PagerAdapter? = null
    fun initPager() {
        fragmentAdapter = PagerAdapter(
            childFragmentManager)

        val fragment1 = ChildFragment("1")       
        fragmentAdapter!!.addFragment(fragment1,"title")

        val fragment2 = ChildFragment("2")
        fragmentAdapter!!.addFragment(fragment2,"title")

        val fragment3 = ChildFragment("3")
        fragmentAdapter!!.addFragment(fragment3,"title")

        viewPager.adapter = fragmentAdapter        
        viewPager.offscreenPageLimit = 3

        viewPager.addOnPageChangeListener(object :
            ViewPager.OnPageChangeListener {
            override fun onPageScrolled(
                position: Int,
                positionOffset: Float,
                positionOffsetPixels: Int
            ) {
            }

            override fun onPageSelected(position: Int) {
                // do this instead, assuming your adapter reference
                // is named mAdapter:
                for (page in childFragmentManager.fragments) {
                    val frag: Fragment = fragmentAdapter!!.getItem(position)
                    if (frag != null && frag is ChildFragment && page is ChildFragment) {
                        page.refresh()
                    }
                }
            }

            override fun onPageScrollStateChanged(state: Int) {}
        })
    }
}



class PagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) {

    private val mFragmentList = ArrayList<Fragment>()
    private val mFragmentTitleList = ArrayList<String>()

    val activeFragment: List<Fragment>
        get() = mFragmentList

    override fun getItem(position: Int): Fragment {
        return mFragmentList[position]
    }

    override fun getCount(): Int {
        return mFragmentList.size
    }


    fun addFragment(fragment: Fragment, title: String) {
        mFragmentList.add(fragment)
        mFragmentTitleList.add(title)
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return mFragmentTitleList[position]
    }
}



class ChildFragment : Fragment{

    var type:String = ""
    constructor(type:String){
        this.type = type
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return super.onCreateView(inflater, container, savedInstanceState)
        if(type.equals("")){
            //TODO LAYOUT LOGIC here according to type validation
        }else{
            //TODO LAYOUT LOGIC here according to type validation
        }

        refresh()
    }
    fun refresh() {
       //TODO CALL API and update your layoyt here

    }
}

如果您阅读异常,您会注意到 org.hibernate.MappingException: Repeated column in mapping for entity: net.javaguides.springboot.model.User column: first_name Repeated column

在您的课堂上,您误以为您在 User column: first_name 中两次使用了 first_name

@Column

只需将 @Column(name = "first_name") private String firstName; @Column(name = "first_name") private String lastName; lastName 注释值更改为“last_name”

答案 2 :(得分:0)

实体映射中重复列:net.javaguides.springboot.model.User 列:first_name

原因-@Column(name = "first_name") 它将您的实体类字段 (firstName) 作为列first_name 映射到数据库中,这是通过对象关系映射 (ORM) 发生的< /p>

作为您的实体字段,firstName 和 lastName bot 具有相同的 ORM @Column(name = "first_name") 这就是为什么您会收到映射中的重复列错误

答案 3 :(得分:0)

在您的 User.java 类中,您已将变量 firstNamelastName 映射到数据库列 first_name,这是错误的。 将变量 @Column(name = "first_name")lastName 更改为 @Column(name = "last_name"),您的问题将得到解决。

温馨提示:复制粘贴行可能会导致愚蠢但难以发现的错误,请尽量避免复制行。