Java Hibernate注释错误Java.lang.String
我目前正在尝试为数据库设置hibernate,我遇到了这个问题,我已经尝试修复了大约4个小时 错误: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.
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图它就像你告诉我的那样工作,现在我只是有一些连接/登录错误,但我应该能够自己修复它们。谢谢,它的工作就像你告诉我的,现在我只是有一些连接/登录错误,但我应该能够修复他们自己。非常感谢。