我正在将 git 与源树应用程序一起使用,我想忽略文件夹文件META-INF的内容,例如文件persistence.xml
workspace\Data\src\META-INF\persistence.xml
Run Code Online (Sandbox Code Playgroud)
我把路径放在.gitignore文件中
#Ignore META-INF
*/*/src/META-INF/*
Run Code Online (Sandbox Code Playgroud)
但是 git 没有忽略该文件,如何忽略此文件夹META-INF 中的所有文件
我尝试按照有关 Spring MVC 的教程进行操作。教程中有UserDao接口(使用的是Spring Data JPA)
public interface UserDao extends JpaRepository<User, Long> {
User findByUsername(String username);
}
Run Code Online (Sandbox Code Playgroud)
还有 UserService 和 UserServiceImpl
public interface UserService {
void save(User user);
User findByUsername(String username);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private RoleDao roleDao;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
public void save(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
Set<Role> roles = new HashSet<>();
roles.add(roleDao.getOne(1L));
user.setRoles(roles);
userDao.save(user);
}
@Override
public User findByUsername(String username) {
return userDao.findByUsername(username);
}
}
Run Code Online (Sandbox Code Playgroud)
JpaRepository findAll()方法返回空结果。我正在尝试通过使用Spring-boot,h2数据库和jpa来实现rest服务。
这是我的 schema.sql
CREATE TABLE IF NOT EXISTS `City` (
`city_id` bigint(20) NOT NULL auto_increment,
`city_name` varchar(200) NOT NULL,
PRIMARY KEY (`city_id`));
Run Code Online (Sandbox Code Playgroud)
我的data.sql文件包括:
INSERT INTO City (city_id,city_name) VALUES(1,'EDE');
INSERT INTO City (city_id,city_name) VALUES(2,'DRUTEN');
INSERT INTO City (city_id,city_name) VALUES(3,'DELFT');
Run Code Online (Sandbox Code Playgroud)
该City实体:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "City")
public class City {
@Id
@GeneratedValue
@Column(name = "city_id")
private Long cityId;
@Column(name = "city_name")
private String cityName;
public Long getCityId() …Run Code Online (Sandbox Code Playgroud) 为了使用,在SQL表中获取一条记录name,我使用以下查询:
SELECT * FROM User WHERE User.name = name;
Run Code Online (Sandbox Code Playgroud)
相应的Spring JPA方法名称如下:
UserEntity findUserByName(@Param("name") String name);
Run Code Online (Sandbox Code Playgroud)
我的问题如下:
如何从SQL表中请求随机记录?
我知道我的SQL查询应该是以下内容:
SELECT * FROM User
ORDER BY RAND()
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
但是,与此相对应的Spring JPA方法名称应该是什么?
UserEntity findUserXXXXXXX (XXXXXXX);
Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义查询
@Repository
public interface SecurityQuestionRepository extends JpaRepository<SecurityQuestion, Integer>{
@Query("select q from SecurityQuestion q order by q.questionId asc limit 0, 3 ")
public List<SecurityQuestion> findQuestion();
}
Run Code Online (Sandbox Code Playgroud)
当我调用服务并调用公共List<SecurityQuestion> findQuestion()方法limit 0,3不起作用
这是休眠日志,
Hibernate: select securityqu0_.question_id as question1_4_, securityqu0_.question_desc as question2_4_ from user_security_question securityqu0_ order by securityqu0_.question_id asc
Run Code Online (Sandbox Code Playgroud)
如何使此限制功能在此工作?
在春季的官方文档中,其内容如下:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.acme.domain");
factory.setDataSource(dataSource());
return factory;
}
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory());
return txManager;
}
Run Code Online (Sandbox Code Playgroud)
和
重要的是创建LocalContainerEntityManagerFactoryBean而不是直接创建EntityManagerFactory,因为前者除了简单地创建EntityManagerFactory之外,还参与异常转换机制。
但是当我尝试使用它时,我得到了错误:
setEntityManagerFactory
(javax.persistence.EntityManagerFactory)
in JpaTransactionManager cannot be applied
to
(org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean)
Run Code Online (Sandbox Code Playgroud)
这是我的进口:
import org.apache.tomcat.jdbc.pool.DataSourceFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
Run Code Online (Sandbox Code Playgroud) 我有一个实体锦标赛如下:
class Tournament {
//other attributes
private LocalDate startDate;
private LocalDate endDate;
}
Run Code Online (Sandbox Code Playgroud)
这代表从开始日期到结束日期持续几天/几个月的锦标赛。我需要检索今天运行的所有锦标赛,例如startDate <= Today && endDate >= Today,使用 Spring JPA 和分页。
我发现的最接近的如下:
@Repository
public interface TournamentRepository extends PagingAndSortingRepository<Tournament, Long> {
Page<Tournament> findByStartBeforeAndEndAfter(LocalDate date, LocalDate dateCopy, Pageable page); //today's date is passed as date and dateCopy
}
Run Code Online (Sandbox Code Playgroud)
方法调用:
tournamentRepository.findByStartBeforeAndEndAfter(LocalDate.now(), LocalDate.now(), page);
Run Code Online (Sandbox Code Playgroud)
这可以解释为startDate < Today && endDate > Today,因此如果锦标赛在今天运行且仅持续 1 天,则该方法不起作用。
有没有更好的方法使用 Spring JPA 来执行此操作,而无需编写自定义查询?
我有以下jpa存储库:
@Query("UPDATE PlayerAccount pa SET pa.password = ?3 WHERE pa.id = ?1 AND pa.password = ?2")
@Modifying
public int updatePasswordWithValidation(Long playerAccountId, String oldPasswordDB, String encodePassword);
Run Code Online (Sandbox Code Playgroud)
现在,我想为mongoDB存储库实现类似的更新查询:
@Query("update( { _id: ObjectId(' $1 ') }, { $set: { messageStatus: $2} })")
Run Code Online (Sandbox Code Playgroud)
但它不起作用.任何有关自定义mongo存储库更新如何显示的参考?
谢谢
使用Ebean创建的Postgres表,我想用手写的语句查询这些表:
SELECT r.name,
r.value,
p.name as param1,
a.name as att1,
p2.name as param2,
a2.name as att2
FROM compatibility c
JOIN attribute a ON c.att1_id = a.id
JOIN attribute a2 ON c.att2_id = a2.id
JOIN PARAMETER p ON a.parameter_id = p.id
JOIN PARAMETER p2 ON a2.parameter_id = p2.id
JOIN rating r ON c.rating_id = r.id
WHERE p.problem_id = %d
OR p2.problem_id = %d
Run Code Online (Sandbox Code Playgroud)
每个连接表代表我的一个模型类.查询执行正常,但我不知道如何继续:
我如何使用Play 2.2执行查询.和Ebean?如何将此查询映射到可迭代对象?我是否需要创建一个包含查询中所有字段的Model类,还是可以使用某种HashMap?如何以安全的方式参数化查询?
民间,
我在休眠3中建立一个标准,如下所示。这是SQL注入证明?
criteria
.add(
Restrictions.sqlRestriction(
"to_char(createDate,'mm/dd/yyyy') like '%" + dateString + "%'"),
StandardBasicTypes.STRING);
Run Code Online (Sandbox Code Playgroud)
我在想的另一个选项是将dateString转换为日期并转换为此
criteria.add(Restrictions.eq(createDate, dateObjCreatedFromString)
Run Code Online (Sandbox Code Playgroud) java ×8
spring ×7
hibernate ×5
spring-data ×2
spring-mvc ×2
sql ×2
ebean ×1
git ×1
h2 ×1
jpql ×1
mongodb ×1
postgresql ×1
spring-boot ×1