Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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 我和JPA的关系有什么问题?_Java_Mysql_Hibernate_Jpa - Fatal编程技术网

Java 我和JPA的关系有什么问题?

Java 我和JPA的关系有什么问题?,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我正在尝试创建一个使用JPA与数据库交互的后端论坛。。我现在面临的问题是实体之间的关系。我有三个表(至少现在是这样),但是当我尝试使用JPA工具创建表时,它并没有创建所有的表,这让我觉得这些关系有问题。有人能帮我吗 @Entity @Table(name="users") public class UserModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long user_id;

我正在尝试创建一个使用JPA与数据库交互的后端论坛。。我现在面临的问题是实体之间的关系。我有三个表(至少现在是这样),但是当我尝试使用JPA工具创建表时,它并没有创建所有的表,这让我觉得这些关系有问题。有人能帮我吗

@Entity
@Table(name="users")
public class UserModel {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long user_id;
    private String name;
    private String email;
    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST,CascadeType.MERGE})
    private ArrayList<TopicoModel> myTopics = new ArrayList<TopicoModel>();

    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST,CascadeType.MERGE})
    private ArrayList<TopicoModel> myFavTopics = new ArrayList<TopicoModel>();
编辑2: 我已经尝试添加一个默认值,但它给出了相同的错误,但使用了“myFavTopics”变量。 以下是填充数据库的代码:

UserModel u1 = new UserModel();
u1.setEmail("asd@asd.pt");
u1.setName("A");

UserModel u2 = new UserModel();
u2.setEmail("qwer@qwer.pt");
u2.setName("B");

PostModel p1 = new PostModel("message 1", 0, 0);
PostModel p2 = new PostModel("message 2", 10, 0);
PostModel p3 = new PostModel("message 3", 0, 20);

ArrayList<PostModel> commentP1 = new ArrayList<PostModel>();
commentP1.add(p1);
commentP1.add(p3);

ArrayList<PostModel> commentP2 = new ArrayList<PostModel>();
commentP2.add(p2);


TopicModel t1 = new TopicModel(commentP1, u1);
TopicModel t2 = new TopicModel(commentP2, u2);

u1.addMyTopic(t1);
u2.addMyTopic(t2);

u1.addMyFavTopic(t2);


UserModel u3 = new UserModel();
u3.setEmail("yujy@yj.pt");
u3.setName("C");

JPAEntityManager factory = new JPAEntityManager();
EntityManager em = factory.getEntityManager();

em.getTransaction().begin();
em.persist(t1);
em.persist(t2);
em.persist(p1);
em.persist(p2);
em.persist(p3);
em.persist(u1);
em.persist(u2);
em.persist(u3);

em.getTransaction().commit();
UserModel u1=newusermodel();
u1.setEmail(“asd@asd.pt");
u1.设定名称(“A”);
UserModel u2=新的UserModel();
u2.setEmail(“qwer@qwer.pt");
u2.设定名称(“B”);
PostModel p1=新的PostModel(“消息1”,0,0);
PostModel p2=新的PostModel(“消息2”,10,0);
PostModel p3=新的PostModel(“消息3”,0,20);
ArrayList commentP1=新的ArrayList();
评注p1.添加(p1);
评注P1.添加(p3);
ArrayList commentP2=新的ArrayList();
评注p2.添加(p2);
TopicModel t1=新的TopicModel(注释P1,u1);
TopicModel t2=新的TopicModel(注释P2,u2);
u1.addMyTopic(t1);
u2.addMyTopic(t2);
u1.addMyFavTopic(t2);
UserModel u3=新的UserModel();
u3.setEmail(“yujy@yj.pt");
u3.集合名(“C”);
JPAEntityManager工厂=新的JPAEntityManager();
EntityManager em=factory.getEntityManager();
em.getTransaction().begin();
em.persist(t1);
em.persist(t2);
em.1(p1);
em.persist(p2);
em.persist(p3);
em.persist(u1);
em.persist(u2);
em.persist(u3);
em.getTransaction().commit();

请将异常日志添加到您的帖子中。在插入UserModel时,您似乎没有为myTopics设置任何内容。请参阅1。它必须是List,而不是ArrayList(或者更好的是Set)。2.您不应该使用即时抓取,尤其是在列表上。3.双向关联必须使用mappedBy具有反向边。4.ID的类型应为Long,而不是Long。
@Entity
@Table(name="posts")
public class PostModel {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long post_id;

    private String message;
    private int likes = 0;
    private int dislikes = 0;
    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST,CascadeType.MERGE})
    private ArrayList<UserModel> agrees;
    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST,CascadeType.MERGE})
    private ArrayList<UserModel> thanks;
Internal Exception: java.sql.SQLException: Field 'myTopics_TOPIC_ID' doesn't have a default value
Error Code: 1364
Call: INSERT INTO users_topics (myFavTopics_TOPIC_ID, UserModel_USER_ID) VALUES (?, ?)
    bind => [2 parameters bound]
Query: DataModifyQuery(name="topicos_favoritos" sql="INSERT INTO users_topics (myFavTopics_TOPIC_ID, UserModel_USER_ID) VALUES (?, ?)")
UserModel u1 = new UserModel();
u1.setEmail("asd@asd.pt");
u1.setName("A");

UserModel u2 = new UserModel();
u2.setEmail("qwer@qwer.pt");
u2.setName("B");

PostModel p1 = new PostModel("message 1", 0, 0);
PostModel p2 = new PostModel("message 2", 10, 0);
PostModel p3 = new PostModel("message 3", 0, 20);

ArrayList<PostModel> commentP1 = new ArrayList<PostModel>();
commentP1.add(p1);
commentP1.add(p3);

ArrayList<PostModel> commentP2 = new ArrayList<PostModel>();
commentP2.add(p2);


TopicModel t1 = new TopicModel(commentP1, u1);
TopicModel t2 = new TopicModel(commentP2, u2);

u1.addMyTopic(t1);
u2.addMyTopic(t2);

u1.addMyFavTopic(t2);


UserModel u3 = new UserModel();
u3.setEmail("yujy@yj.pt");
u3.setName("C");

JPAEntityManager factory = new JPAEntityManager();
EntityManager em = factory.getEntityManager();

em.getTransaction().begin();
em.persist(t1);
em.persist(t2);
em.persist(p1);
em.persist(p2);
em.persist(p3);
em.persist(u1);
em.persist(u2);
em.persist(u3);

em.getTransaction().commit();