Java Hibernate的PrimaryKeyJoinColumn问题

Java Hibernate的PrimaryKeyJoinColumn问题,java,hibernate,jpa,Java,Hibernate,Jpa,我有班上的人: @Entity @Table(name = "person") @Inheritance(strategy= InheritanceType.JOINED) @SequenceGenerator(name = "person_seq", sequenceName = "person_seq", initialValue = 1, allocationSize = 1) public class Person implements Serializable{ @Id

我有班上的人:

@Entity
@Table(name = "person") 
@Inheritance(strategy= InheritanceType.JOINED)
@SequenceGenerator(name = "person_seq", sequenceName = "person_seq", initialValue = 1,  allocationSize = 1)
public class Person implements Serializable{ 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "person_seq")
    @Column(name = "id")
    private long id;
} 
类用户:

@Entity
@Table(name = "user")
@PrimaryKeyJoinColumn(name = "id")
public class User extends Person{
    //some code
}
还有班上的客人:

@Entity
@Table(name = "guest")
@PrimaryKeyJoinColumn(name = "id")
public class Guest extends Person{
    //some code
}
这样,继承就可以很好地工作。问题是:所有三个表的列都具有相同的名称“id”。我想要最后两个名为“person\u id”的表中的外键

如果我更改了child上的列名,则会出现“在此结果集中找不到列名person\u id”异常:

@PrimaryKeyJoinColumn(name = "person_id")
@PrimaryKeyJoinColumn(name = "person_id", referencedColumnName = "id")
Guest guest = new Guest("Rodrigo", "10341367630", "1231", "55 35131 131", date, "1123123", "cpf", "guest");
guestDAO.create(guest);
我也尝试过这种方法(仍然得到相同的异常):

有人知道如何解决这个问题吗

编辑:根本原因:

org.postgresql.util.PSQLException: The column name person_id was not found in this ResultSet
org.postgresql.jdbc2.AbstractJdbc2ResultSet.findColumn(AbstractJdbc2ResultSet.java:2562)
org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultSet.java:2431)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.hibernate.engine.jdbc.internal.proxy.AbstractResultSetProxyHandler.continueInvocation(AbstractResultSetProxyHandler.java:104)
org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
com.sun.proxy.$Proxy25.getLong(Unknown Source)
org.hibernate.id.IdentifierGeneratorHelper.get(IdentifierGeneratorHelper.java:149)
org.hibernate.id.IdentifierGeneratorHelper.getGeneratedIdentity(IdentifierGeneratorHelper.java:92)
org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:100)
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2767)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3278)
org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203)
org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183)
org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167)
org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320)
org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)
org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)
org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:757)
org.hibernate.internal.SessionImpl.save(SessionImpl.java:749)
org.hibernate.internal.SessionImpl.save(SessionImpl.java:745)
br.com.hotel.upm.model.dao.hibernate.HibBaseDAO.create(HibBaseDAO.java:16)
br.com.hotel.action.LoginAction.execute(LoginAction.java:35)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:315)
org.mentawai.filter.TransactionFilter.filter(TransactionFilter.java:169)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
org.mentawai.filter.AjaxFilter.filter(AjaxFilter.java:25)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
org.mentawai.filter.ValidatorFilter.filter(ValidatorFilter.java:184)
org.mentawai.filter.ValidationFilter.filter(ValidationFilter.java:137)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
org.mentawai.filter.MentaContainerFilter.filter(MentaContainerFilter.java:46)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
org.mentawai.filter.RedirectAfterLoginFilter.filter(RedirectAfterLoginFilter.java:54)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
org.mentawai.filter.AuthenticationFilter.filter(AuthenticationFilter.java:172)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:147)
org.mentawai.core.Controller.invokeAction(Controller.java:1129)
org.mentawai.core.Controller.service(Controller.java:984)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
以及我得到异常的代码:

@PrimaryKeyJoinColumn(name = "person_id")
@PrimaryKeyJoinColumn(name = "person_id", referencedColumnName = "id")
Guest guest = new Guest("Rodrigo", "10341367630", "1231", "55 35131 131", date, "1123123", "cpf", "guest");
guestDAO.create(guest);
DAO中的代码:

public void create(Object objectRow) {
   session.save(objectRow);
   session.flush();
}

非常感谢

是否更改了数据库表定义?异常的完整堆栈跟踪是什么?导致异常的代码是什么?不,我没有。每次我试图保存客人或用户时,都会出现异常。关于这个异常,我将编辑并写入帖子。如果您的表不包含列,Hibernate显然无法读取该列中的任何值。更改表定义。哦,但是该列是由hibernate创建的。它存在于我的数据库中。表person的列id为PK,guest和user的列person\u id为PK。