我使用JPA进行数据库访问,并使用正确的名称注释每一列.现在如果我执行查询(例如findAll())它返回
Unknown column 'program0_.program_id' in 'field list'
Run Code Online (Sandbox Code Playgroud)
错误消息是正确的program_id是未知的,因为真实姓名是programId.
型号:程序
@Entity
@Table(name = "programs")
@XmlRootElement
public class Program implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "programId")
private Long programId;
@ManyToMany
@JoinTable(
name = "programlabels",
joinColumns = {
@JoinColumn(name = "program", referencedColumnName = "programId")},
inverseJoinColumns = {
@JoinColumn(name = "label", referencedColumnName = "labelId")})
private Collection<Label> labels;
}
Run Code Online (Sandbox Code Playgroud)
标签
@Entity
@Table(name = "labels")
@XmlRootElement
public class Label implements Serializable {
@Id
@Basic(optional …Run Code Online (Sandbox Code Playgroud) 请注意,此代码适用于普通的Spring,但不适用于Spring Boot(v1.3.3),是否有一些我缺少的东西,因为这是从一个有效的弹簧应用程序导入的.下面的代码来自spring boot应用程序
@Entity
@Table(name="project")
public class Project implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private int id;
@Column(name="teamId")
private int teamId;
//private String Rentabiliteit;
@Column
//@Index(name="IProject_status",columnNames="Status")
private String status;
@Column
//@Index(name="IProject_naam",columnNames="Naam")
private String naam;
//public Prototype m_Prototype;
//public Team m_Team;
}
Run Code Online (Sandbox Code Playgroud)
SQL
CREATE TABLE IF NOT EXISTS `project` (
`id` int(11) NOT NULL,
`teamId` int(11) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`naam` varchar(255) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
错误
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: …Run Code Online (Sandbox Code Playgroud) Spring Data Jpa 方法是这样的:
@Query("select pb.id,pp.max_borrow_amt,pp.min_borrow_amt
from product_loan_basic pb left join product_loan_price pp on pb.code=pp.product_code
where pb.code IN(?1) and pb.status='publish' order by ?2 ",
nativeQuery = true)
List<Object[]> findByCodesIn(List<String> codes,String orderby);
Run Code Online (Sandbox Code Playgroud)
那么 order by 是“ max_borrow_amt desc ”,但这是无效的。
列表是无序的。
目前我正在将新的JPA实体映射到旧数据库.数据库中的列名称使用下划线分隔列名称,如"my_column_name".
问题是JPA默认使用camel case.
// Will be 'myColumnName' in queries and generated databases
private String myColumnName;
Run Code Online (Sandbox Code Playgroud)
我知道可以在属性上添加@Column(name ="..")或@JoinColumn(name ="...") - 但这意味着我必须将它添加到所有实体中的每个属性.
@Column(name = "my_column_name")
private String myColumnName;
Run Code Online (Sandbox Code Playgroud)
是否可以更改JPA的默认行为以使用'my_column_name'而不是'myColumnName'?
默认情况下,我的 Spring Boot 项目通过将名称从camelCase 转换为snake_case(例如from fooBarto foo_bar)来将实体属性映射到表列。
我正在处理现有的数据库,其中实体属性名称保留为表列名称(例如 from fooBarto fooBar),因此我尝试使用@Column注释显式指定名称:
@Column(name = "fooBar")
private String fooBar;
Run Code Online (Sandbox Code Playgroud)
这是行不通的。我遵循了这里给出的建议:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Run Code Online (Sandbox Code Playgroud)
我@Column现在已成功考虑在内,但我在没有@Column注释的属性上丢失了camelCase到snake_case的隐式转换。
除非在@Column注释中明确指定,否则知道默认情况下如何从camelCase 转换为snake_case吗?
我有 spring 4+ hibernate 4.3 + psql 9.5 应用程序,并遇到了驼峰字段转换的一些问题。
Hibernate: select trainservi0_.trainServiceId as trainSer1_16_, trainservi0_.category as category2_16_, trainservi0_.date as date3_16_, trainservi0_.description as descript4_16_, trainservi0_.name as name5_16_, trainservi0_.status as status6_16_, trainservi0_.trainNumber as trainNum7_16_, trainservi0_.version as version8_16_ from tms.public.train_service trainservi0_
2016-02-29 13:09:34 WARN SqlExceptionHelper:144 - SQL Error: 0, SQLState: 42703
2016-02-29 13:09:34 ERROR SqlExceptionHelper:146 - ERROR: column trainservi0_.trainserviceid does not exist
Perhaps you meant to reference the column "trainservi0_.trainServiceId".
Run Code Online (Sandbox Code Playgroud)
这是我的配置:
public class DataBaseProdConfig {
@Resource
private Environment env;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() …Run Code Online (Sandbox Code Playgroud) hibernate ×5
java ×5
jpa ×3
spring-boot ×3
spring ×2
jdbc ×1
naming ×1
openjpa ×1
persistence ×1
postgresql ×1
sql ×1