@Column 名称忽略了 JPA

@Column name ignored JPA

结合使用 Google App Engine 和 MySQL

JPA 忽略了我的列别名

我试过声明变量:

@Column(name = "fk_location_id") 
private Long locationId;

我也试过在 getter 上声明:

@Column(name = "fk_location_id") 
public Long getLocationId() {
    return locationId;
}

我也试过在两者上声明

None 工作。刚刚抛出错误:

Caused by: org.datanucleus.store.rdbms.exceptions.MissingColumnException: Required columns missing from table fk_location_id

我用谷歌搜索并找到了与 Hibernate 相关的内容,但不相信我正在使用它?

这是我的 persistence.xml 文件

<property name="datanucleus.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
<property name="datanucleus.ConnectionURL" value="jdbc://mydb..." />
<property name="datanucleus.ConnectionUserName" value="user" />
<property name="datanucleus.ConnectionPassword" value="pass" />
<property name="datanucleus.autoStartMechanism" value="None" />
<property name="datanucleus.validateTables" value="true" />
<property name="datanucleus.validateConstraints" value="true" />
<property name="datanucleus.validateColumns" value="true" />
<property name="datanucleus.DetachAllOnCommit" value="true" />
<property name="datanucleus.maxFetchDepth" value="1" />
<property name="datanucleus.storeManagerType" value="rdbms" />

这是 table 的架构:

CREATE TABLE `sites` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`fk_location_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

我如何查询数据库:

EntityManagerFactory factory;
factory = Persistence.createEntityManagerFactory(Globals.PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();

Query q = em.createQuery("select t from Site t");
List<Site> siteList = q.getResultList();

Java Class:

@Entity
@Table(name = "sites")
public class Site {

private Long id;
private String name;
private Long locationId;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


public Long getLocationId() {
    return locationId;
}

public void setLocationId(Long locationId) {
    this.locationId = locationId;
}

}

错误提示未找到 FKLOCATIONID 列,因此它在应该搜索 fk_location_id

时搜索 FKLOCATIONID

确保 @Column 注释来自 javax.persistence 而不是来自 JDO 或其他地方。 DataNucleus 只能使用 JDO 或 JPA 注释,不能混合使用两者