Java Hibernate注释错误Java.lang.String

Java Hibernate注释错误Java.lang.String,java,hibernate,Java,Hibernate,我目前正在尝试为数据库设置hibernate,我遇到了这个问题,我已经尝试修复了大约4个小时 错误: Apr 27, 2021 8:22:26 AM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.4.0.Final} Apr 27, 2021 8:22:26 AM org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.

我目前正在尝试为数据库设置hibernate,我遇到了这个问题,我已经尝试修复了大约4个小时

错误:

Apr 27, 2021 8:22:26 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.4.0.Final}
Apr 27, 2021 8:22:26 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Apr 27, 2021 8:22:26 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
Apr 27, 2021 8:22:26 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Apr 27, 2021 8:22:26 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] at URL [jdbc:sqlserver://localhost:1434;DatabaseName=Chatbot]
Apr 27, 2021 8:22:26 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=sa}
Apr 27, 2021 8:22:26 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Apr 27, 2021 8:22:26 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Apr 27, 2021 8:22:26 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on backend.classes.Result.answer references an unknown entity: java.lang.String
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:97)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1815)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1759)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1646)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:287)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:903)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:934)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at backend.classes.DBConnector.setUp(DBConnector.java:28)
    at backend.classes.DBConnector.run(DBConnector.java:18)
    at backend.classes.DBConnector.main(DBConnector.java:13)
My persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="chatbot">
        <description>
            Persistence Unit for the Chatbot
        </description>


        <class>java.lang.String</class>
        <class>backend.classes.Result</class>
        
        <exclude-unlisted-classes>false</exclude-unlisted-classes>

        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost:1434;DatabaseName=Chatbot" />
            <property name="javax.persistence.jdbc.user" value="****" />
            <property name="javax.persistence.jdbc.password" value="****" />
            <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>

    </persistence-unit>

</persistence>

聊天机器人的持久化单元
java.lang.String
backend.classes.Result
假的
用于测试连接的演示类:

package backend.classes;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class DBConnector {
    private EntityManagerFactory entityManagerFactory;
    
    public static void main(String[] args) {
        new DBConnector().run();
    }

    void run() {
        try {
            setUp();
            testBasicUsage();
            tearDown();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void setUp() throws Exception {
        entityManagerFactory = Persistence.createEntityManagerFactory("chatbot");
    }

    public void tearDown() throws Exception {
        entityManagerFactory.close();
    }

    public void testBasicUsage() {
        EntityManager em = entityManagerFactory.createEntityManager();
        em.getTransaction().begin();
        
        List<Result> result = em.createQuery( "from dbo.AntwortUndTag", Result.class ).getResultList();
        for ( Result r : result ) {
            System.out.println(r.toString());
        }
        
        em.getTransaction().commit();
        em.close();
    }
}
package backend.classes;
导入java.util.List;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.persistence;
公共类DBConnector{
私人实体管理工厂实体管理工厂;
公共静态void main(字符串[]args){
新建DBConnector().run();
}
无效运行(){
试一试{
设置();
testBasicUsage();
撕裂();
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
public void setUp()引发异常{
entityManagerFactory=Persistence.createEntityManagerFactory(“聊天机器人”);
}
public void tearDown()引发异常{
entityManagerFactory.close();
}
public void testBasicUsage(){
EntityManager em=EntityManager工厂。createEntityManager();
em.getTransaction().begin();
List result=em.createQuery(“来自dbo.AntwortUndTag”,result.class).getResultList();
for(结果r:结果){
System.out.println(r.toString());
}
em.getTransaction().commit();
em.close();
}
}
我的数据库如下所示:

我试图从两个外键中得到“antwort”字符串


我已经尝试在持久性中添加类“Result”和“String”。xml

关联需要与其他实体(或嵌入式)关联。错误告诉您出了什么问题:您正在尝试将一对一与
结果中的
字符串关联。回答

您需要做的是将所有三个表映射为实体:

@Entity
@Table(name = "Antworten")
class Antwort {
...
}

@Entity
@Table(name = "AntwortUndTag")
class Result {
    ...
}


@Entity
@Table(name = "Tags")
class Tag {
...
}

现在,您可以在
结果
中创建关联:

@Entity
@Table(name = "AntwortUndTag")
class Result {

   @ManyToOne
   @JoinColumn(name="antwortID")
   Antwort answer;

   @ManyToOne
   @JoinColumn(name="tagID")
   Tag tag;
}
请注意,我使用了一个
@ManyToOne
,因为从图中可以看出答案可以有多个标记


您可以在Hibernate ORM文档中找到许多关于的示例。具体参见示例172。具有链接实体的双向多对多。这似乎就是您需要的映射。

关联需要与其他实体(或可嵌入对象)关联。错误告诉您出了什么问题:您正在尝试将一对一与
结果中的
字符串关联。回答

您需要做的是将所有三个表映射为实体:

@Entity
@Table(name = "Antworten")
class Antwort {
...
}

@Entity
@Table(name = "AntwortUndTag")
class Result {
    ...
}


@Entity
@Table(name = "Tags")
class Tag {
...
}

现在,您可以在
结果
中创建关联:

@Entity
@Table(name = "AntwortUndTag")
class Result {

   @ManyToOne
   @JoinColumn(name="antwortID")
   Antwort answer;

   @ManyToOne
   @JoinColumn(name="tagID")
   Tag tag;
}
请注意,我使用了一个
@ManyToOne
,因为从图中可以看出答案可以有多个标记


您可以在Hibernate ORM文档中找到许多关于的示例。具体参见示例172。具有链接实体的双向多对多。这似乎就是您需要的映射。

首先,为什么要使用
java.lang.String
?其次,是否有名为
tag
answer
的表,如果有,为什么它们不在
persistence.xml
中?
@JoinColumn(name=“antwort”)
看起来也有问题。检查您的UML图,了解一个开始,为什么您有
java.lang.String
?其次,是否有名为
tag
answer
的表,如果有,为什么它们不在
persistence.xml
中?
@JoinColumn(name=“antwort”)
看起来也有问题。检查你的UML图它就像你告诉我的那样工作,现在我只是有一些连接/登录错误,但我应该能够自己修复它们。谢谢,它的工作就像你告诉我的,现在我只是有一些连接/登录错误,但我应该能够修复他们自己。非常感谢。