Java com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:字段列表中的未知列“day0.calendar\u id”

Java com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:字段列表中的未知列“day0.calendar\u id”,java,mysql,hibernate,wildfly,Java,Mysql,Hibernate,Wildfly,我已经发现了许多与我非常相似的问题,但遗憾的是,没有一个解决方案对我有帮助 我需要表格日历和日期之间的多对一关系。日历可以有多天 这是我的代码,感谢您查看: 日历类: @Entity @Table(name="calendars") @NamedQuery(name="Calendar.findAll", query="SELECT c FROM Calendar c") public class Calendar implements Serializable { private stati

我已经发现了许多与我非常相似的问题,但遗憾的是,没有一个解决方案对我有帮助

我需要表格日历和日期之间的多对一关系。日历可以有多天

这是我的代码,感谢您查看:

日历类:

@Entity
@Table(name="calendars")
@NamedQuery(name="Calendar.findAll", query="SELECT c FROM Calendar c")

public class Calendar implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@Column(name="calendar_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int calendarId;

private String background;

@Temporal(TemporalType.DATE)
private Date begindate;
CalendarBean:

@EJB
CalendarEJB calendarEJB;

private static final long serialVersionUID = 1L;

private String calendarName;
private int calendarID;

public String getCalendarName() {
    return calendarName;
}

public void setCalendarName(String calendarName) {
    this.calendarName = calendarName;
}

public int getCalendarID() {
    return calendarID;
}

public void setCalendarID(int calendarID) {
    this.calendarID = calendarID;
}
日班:

@Entity
@Table(name="days")
@NamedQuery(name="Day.findAll", query="SELECT d FROM Day d")
public class Day implements Serializable {
private static final long serialVersionUID = 1L;

@Id
private int iddays;

private int calendars_calendar_id;

//bi-directional many-to-one association to Calendar
@ManyToOne
@JoinColumn(name="calendar_id")
private Calendar calendar;

public int getCalendars_calendar_id() {
    return calendars_calendar_id;
}

public void setCalendars_calendar_id(int calendars_calendar_id) {
    this.calendars_calendar_id = calendars_calendar_id;
}
豆豆:

@EJB
DayEJB dayEJB;

private static final long serialVersionUID = 1L;

private int iddays;
private int calendars_calendar_id;

private CalendarBean calendarb = new CalendarBean();

public int getIddays() {
    return iddays;
}

public void setIddays(int iddays) {
    this.iddays = iddays;
}

public int getCalendars_calendar_id() {
    return calendars_calendar_id;
}

public void setCalendars_calendar_id(int calendars_calendar_id) {
    this.calendars_calendar_id = calendars_calendar_id;
}

public List<Day> allDays(){
    return dayEJB.listAllDays();

}
我将@JoinColumnname=calendar\u id更改为外键名称,但错误仍然存在,因此我将外键重命名为该值也没有更改。如果我将@JoinColumnname=calendar\u id重命名为calendars\u calendar\u id,则wildfly根本无法部署

控制台:

Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:89) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.getResultSet(Loader.java:2065) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.doQuery(Loader.java:909) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2553) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2539) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.Loader.list(Loader.java:2364) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
... 133 more

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'day0_.calendar_id' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.8.0_25]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [rt.jar:1.8.0_25]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.8.0_25]
at java.lang.reflect.Constructor.newInstance(Constructor.java:408) [rt.jar:1.8.0_25]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
at com.mysql.jdbc.Util.getInstance(Util.java:360)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2030)
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:462)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:80) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
... 149 more
这里是重命名@joincolumn时的wildfly控制台:

12:29:45,739 WARN  [org.jboss.as.jpa] (DeploymentScanner-threads - 1) JBAS011411: Unexpected problem gathering statistics: java.lang.IllegalStateException: JBAS011477: Persistence unit 'Calendar-2dv012.war#Calendar-2dv012' is not available
at org.jboss.as.jpa.management.EntityManagerFactoryLookup.entityManagerFactory(EntityManagerFactoryLookup.java:44)
at org.jboss.as.jpa.hibernate4.management.HibernateEntityStatistics.getDynamicChildrenNames(HibernateEntityStatistics.java:145)
at org.jboss.as.jpa.management.DynamicManagementStatisticsResource.getChildren(DynamicManagementStatisticsResource.java:204)
at org.jboss.as.controller.registry.AbstractModelResource$DelegateResource.getChildren(AbstractModelResource.java:254) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:252) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:239) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:225) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:254) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:239) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:225) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:254) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:239) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:225) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:254) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:239) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:225) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.registry.Resource$Tools.readModel(Resource.java:213) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.ModelControllerImpl.writeModel(ModelControllerImpl.java:575) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.OperationContextImpl.createPersistenceResource(OperationContextImpl.java:224) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:526) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.AbstractOperationContext.completeStepInternal(AbstractOperationContext.java:281) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.AbstractOperationContext.finishStep(AbstractOperationContext.java:698) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:673) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:484) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.AbstractOperationContext.completeStepInternal(AbstractOperationContext.java:281) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:276) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:271) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:145) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.ModelControllerImpl$3$1$1.run(ModelControllerImpl.java:555) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.as.controller.ModelControllerImpl$3$1$1.run(ModelControllerImpl.java:551) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.8.0_25]
at org.jboss.as.controller.ModelControllerImpl$3$1.run(ModelControllerImpl.java:551) [wildfly-controller-8.1.0.Final.jar:8.1.0.Final]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_25]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_25]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [rt.jar:1.8.0_25]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [rt.jar:1.8.0_25]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_25]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_25]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_25]
at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final.jar:2.1.1.Final]

12:29:45,790 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 1) JBAS018565: Replaced deployment "Calendar-2dv012.war" with deployment "Calendar-2dv012.war"
12:29:45,790 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 1) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.persistenceunit."Calendar-2dv012.war#Calendar-2dv012": org.jboss.msc.service.StartException in service jboss.persistenceunit."Calendar-2dv012.war#Calendar-2dv012": javax.persistence.PersistenceException: [PersistenceUnit: Calendar-2dv012] Unable to build Hibernate SessionFactory
日历EJB:

@Stateless
@LocalBean
public class CalendarEJB {

 @PersistenceContext (name = "CalendarEJB")
    EntityManager em;

 public List<Calendar> listAllCalendars(){

    TypedQuery<Calendar> theQuery = em.createQuery("SELECT c FROM Calendar c", Calendar.class);
    List<Calendar> result = theQuery.getResultList();
    return result;  
 }

 public Calendar getCalendarById(int id){

        TypedQuery<Calendar> theQuery = em.createQuery("SELECT c FROM Calendar c",           Calendar.class);
        List<Calendar> result = theQuery.getResultList();

        for(int i=0;i<=result.size()-1;i++){
            if(result.get(i).getCalendarId()== id){

                return result.get(i);
            }   
        }   
            return null;
     }
DayEjb:

@Stateless
@LocalBean
public class DayEJB {

 @PersistenceContext (name = "DayEJB")
    EntityManager em;

 public List<Day> listAllDays(){

    TypedQuery<Day> theQuery = em.createQuery("SELECT d FROM Day d", Day.class);
    List<Day> result = theQuery.getResultList();
    return result;  
 }

 public Day getDayById(int id){

        TypedQuery<Day> theQuery = em.createQuery("SELECT d FROM Day d", Day.class);
        List<Day> result = theQuery.getResultList();

        for(int i=0;i<=result.size()-1;i++){
            if(result.get(i).getIddays()== id){

                return result.get(i);
            }   
        }   
            return null;
     }

 public void createDay(Day d){

     em.persist(d);
     System.out.println("Data Added Successfully"); 

 }
这是Html:

<h:form>
                <h3>Days:</h3>
                <h:dataTable value="#{dayBean.allDays()}" var="day">

                    <h:column>
                        <f:facet name="header">ID</f:facet>
                        #{day.iddays}
                        </h:column>
                    <h:column>
                        <f:facet name="header">Date</f:facet>
                        #{day.date}
                        </h:column>
                    <h:column>
                        <f:facet name="header">Text</f:facet>
                        #{day.text}
                    </h:column>
                    <h:column>
                        <f:facet name="header">Link</f:facet>
                        #{day.link}
                        </h:column>
                    <h:column>
                        <f:facet name="header">Calendar ID</f:facet>
                        #{day.calendars_calendar_id}
                        </h:column>
                </h:dataTable>

            </h:form>

您的实体模型与数据库架构不匹配

实体模型定义的关联日->日历如下:

@Entity
@Table(name = "days")
public class Day implements Serializable {

    @ManyToOne
    @JoinColumn(name="calendar_id")
    private Calendar calendar;
}

但是在数据库中,外键列称为calendars\u calendar\u id,而不是calendar\u id。

您可以将DaoImpl粘贴到执行select的位置吗?您留下的内容太多,读者无法猜测。您正在从关联的托管bean调用的任何EJB方法。哪个方法中的哪一行导致上述异常?与具体问题无关:为什么要使用new关键字here-private CalendarBean CalendarBean=new CalendarBean;,创建CalendarBean的新实例;?您应该获得它的托管实例。请考虑遵循java命名约定。属性名称(如calendars\u calendar\u id)不符合一般约定。谢谢,我添加了缺少的方法和调用html。我之前尝试过,但之后wildfly无法再启动。刚刚发现insertable=false,Updateable=false当时缺失了。现在开始工作了。谢谢
@Entity
@Table(name = "days")
public class Day implements Serializable {

    @ManyToOne
    @JoinColumn(name="calendar_id")
    private Calendar calendar;
}