<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.11.13.RELEASE</version>
</dependency>
</dependencies>
DROP TABLE IF EXISTS `property` ;
CREATE TABLE IF NOT EXISTS `property` (
`id` VARCHAR(60) NOT NULL,
`supplier_id` VARCHAR(30) NOT NULL,
`url` VARCHAR(255) NOT NULL,
`main_pic` VARCHAR(255) NOT NULL,
`lat` DOUBLE NOT NULL,
`lng` DOUBLE NOT NULL,
`sys_type` VARCHAR(30) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`description` TEXT NOT NULL,
`one_liner` VARCHAR(255) NOT NULL DEFAULT '',
`num_bedrooms` TINYINT(127) NOT NULL,
`num_bathrooms` TINYINT(127) NOT NULL,
`max_occ` TINYINT(127) NOT NULL,
`country` CHAR(2) NOT NULL,
`rating` DOUBLE NOT NULL DEFAULT 0,
`num_raters` INT NOT NULL DEFAULT 0,
`rank` DOUBLE NOT NULL DEFAULT 0,
`lowest_ppn` DOUBLE NOT NULL DEFAULT 0,
`max_ppn` DOUBLE NOT NULL DEFAULT 0,
`avg_ppn` DOUBLE NOT NULL DEFAULT 0,
`private_pool` TINYINT(1) NOT NULL DEFAULT 0,
`pool` TINYINT(1) NOT NULL DEFAULT 0,
`internet_access` TINYINT(1) NOT NULL DEFAULT 0,
`air_conditioning` TINYINT(1) NOT NULL DEFAULT 0,
`bbq` TINYINT(1) NOT NULL DEFAULT 0,
`satellite` TINYINT(1) NOT NULL DEFAULT 0,
`hot_tub` TINYINT(1) NOT NULL DEFAULT 0,
`sauna` TINYINT(1) NOT NULL DEFAULT 0,
`parking` TINYINT(1) NOT NULL DEFAULT 0,
`instant_book` TINYINT(1) NOT NULL DEFAULT 0,
`updated` DATETIME NOT NULL DEFAULT NOW(),
PRIMARY KEY (`id`, `supplier_id`))
ENGINE = InnoDB;
@Entity
@Table(name="property")
public class Property {
@EmbeddedId
private PropertyCompositeKey id;
@NotNull
@Column(name="url")
private String url;
@Column(name="main_pic")
@NotNull
private String mainPic;
@Column(name="lat")
@Min(-180)
@Max(180)
@NotNull
private Double lat;
@Column(name="lng")
@Min(-90)
@Max(90)
@NotNull
private Double lng;
@Column(name="type")
@NotNull
private String externalType;
@Column(name="name")
@NotNull
private String name;
@Column(name="description")
@NotNull
private String description;
@Column(name="num_bedrooms")
@Min(1)
@NotNull
private Integer numBedrooms;
@Column(name="num_bathrooms")
@Min(1)
@NotNull
private Integer numBathrooms;
@Column(name="max_occ")
@Min(1)
@NotNull
private Integer maxOcc;
@Column(name="country")
@Length(min=2,max=2)
@NotNull
private String country;
@Column(name="rating")
private Double rating;
@Column(name="num_raters")
private Integer numRaters;
@Column(name="rank")
private Double rank;
@Column(name="lowest_ppn")
@Min(1)
private Double lowestPpn;
@Column(name="max_ppn")
@Min(1)
private Double maxPpn;
@Column(name="avg_ppn")
@Min(1)
private Double avgPpn;
@Column(name="private_pool")
private Boolean privatePool;
@Column(name="pool")
private Boolean pool;
@Column(name="internet_access")
private Boolean internetAccess;
@Column(name="air_conditioning")
private Boolean airConditioning;
@Column(name="bbq")
private Boolean bbq;
@Column(name="satellite")
private Boolean satellite;
@Column(name="hot_tub")
private Boolean hotTub;
@Column(name="sauna")
private Boolean sauna;
@Column(name="parking")
private Boolean parking;
@Column(name="instant_book")
private Boolean instantBook;
@Column(name="updated")
@Version
private Timestamp updated;
public void setKey(String id, String supplierId) {
PropertyCompositeKey pck = new PropertyCompositeKey();
pck.setId(id);
pck.setSupplierId(supplierId);
this.id = pck;
}
}
@Embeddable
public class PropertyCompositeKey implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6575008230123343148L;
@Column(name="id")
@NotNull
private String id;
@Column(name="supplier_id")
@NotNull
private String supplierId;
}
@Repository
public interface PropertyRepository extends JpaRepository<Property, PropertyCompositeKey> {
}
public interface PropertiesService {
Property save(Property property);
}
@Service
public class PropertyServiceImpl implements PropertiesService {
@Autowired
private PropertyRepository repo;
@Override
@Transactional
public Property save(Property property) {
Property saved = repo.save(property);
return saved;
}
}
@Configuration
@EnableJpaRepositories("property.dao")
@EnableTransactionManagement
@PropertySource(
value={"classpath:/properties.properties"},
ignoreResourceNotFound = false)
@ComponentScan(basePackages={"property.properties"})
public class PropertySpringConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public DataSource dataSource(@Value("${jdbc.driverClassName}") String driverClass,
@Value("${jdbc.url}") String url,
@Value("${jdbc.username}") String un,
@Value("${jdbc.password}") String pw,
@Value("${jdbc.minIdleConnections}") int mi,
@Value("${jdbc.initialPoolSize}") int is) {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(driverClass);
ds.setUrl(url);
ds.setUsername(un);
ds.setPassword(pw);
ds.setMinIdle(mi);
ds.setInitialSize(is);
return ds;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan(new String[] { "property.entity" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean
public PlatformTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean entityManagerFactory, DataSource ds) {
JpaTransactionManager jtm = new JpaTransactionManager();
jtm.setEntityManagerFactory(entityManagerFactory.getNativeEntityManagerFactory());
jtm.setDataSource(ds);
return jtm;
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty(
"hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
return properties;
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class,classes=PropertySpringConfig.class)
public class TestRepository {
@Autowired
private PropertiesService propertyRepository;
@Test
@Commit
public void testRepository() {
Property p = new Property();
p.setKey("TEST_ID", "TEST_SUPPLIER");
p.setAirConditioning(true);
p.setAvgPpn(500.0);
p.setCountry("ES");
p.setDescription("TEST DESCRIPTION");
p.setExternalType("TEST");
p.setHotTub(false);
p.setLat(12.5);
p.setLng(45.6);
p.setLowestPpn(150.4);
p.setMainPic("TEST");
p.setMaxOcc(5);
p.setMaxPpn(777.4);
p.setName("TEST NAME");
p.setNumBathrooms(3);
p.setNumBedrooms(7);
p.setNumRaters(5);
p.setPrivatePool(true);
p.setRank(1.0);
p.setRating(4.5);
p.setUrl("TEST");
Property s = propertyRepository.save(p);
}
}
DEBUG: org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl
我无法看到我错过配置了什么。
你能告诉我,我可以做什么来解决这个问题,并使实体持久化到数据存储吗?
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf, DataSource ds) {
JpaTransactionManager jtm = new JpaTransactionManager();
jtm.setEntityManagerFactory(emf);
return jtm;
}
问题内容: 我正在使用Spring + Hibernate+JPA,但遇到无法将实体持久保存到数据库的情况。我已经建立了一个带有@Transactional注释的服务类。它使用包含注入的EntityManager的DAO。当我在服务对象上调用函数时,我看到DAO正在进行大量的选择读取,但是由于我的DAO发出的合并和删除操作,没有更新/删除。当然,我的设置有问题,但是我看不到它。 persisten
问题内容: 我正在尝试使用注释将Spring与Hibernate结合使用,并且出现以下错误: 这是我的设置… 我的实体: 我的豆子: } 我在Spring中启用注释: 当我通过BlazeDS从Flex应用程序调用Foo.addBar方法时收到错误消息。 我真的很想避免其他配置,而且似乎所有这些都可以解决。 我正在使用Spring 3.0.0.RC1,Hibernate Annotations 3.
问题内容: 一个运行了几个月的应用程序已经停止使用已经有几个月历史的JPA 批注。在进行集成测试时,我看到许多“ ”类型错误。 我不清楚这里出了什么问题。 我没有文件,因为我正在使用hibernate实体管理器。由于我仅使用注释,因此我的实体没有.hbm.xml文件。我的文件很小,可以正常保存。 我显然丢失了一些东西,但不能动弹。 我正在使用hibernate批注3.2.1,hibernate-e
我有两个实体 实体1 实体2 我对Jpa不是很熟悉,所以如果您需要对我的问题进行任何澄清,或者您需要任何更多的信息,请告诉我。
属性: 这是(Spring): 通过一个REST控制器和一个JSON,我想创建一个新的: 输出JSON: 我希望它们在保存操作之后被验证/返回。 要解决此问题,我必须在REST控制器中注入/声明,并调用方法(或者我必须调用方法以获得完整的持久化实体): 是否有一个自动的方法/注释,使用JPA或Spring或Hibernate,以便拥有“完整的”持久化实体? 我希望避免在每个REST或服务类中声明,
问题内容: 我在父方使用批注具有一对一关系。现在,我想自己保存子实体。 例如,我有和作为孩子的实体,我需要保存(父的id属性设置为之后的课程)。但是,当使用这种安排时,我在下面列出了一个例外… 为什么hibernate不允许这样做的任何想法?更清楚地说,我的代码如下… ParentEntity: ChildEntity: 我尝试保存的方式是… 关于如何尝试保存子实体,任何指针将不胜感激。 问题答案