我正在尝试使用Spring Data + Hibernate启动Java SE应用程序,并且到目前为止完成了以下操作:
配置文件
@Configuration
@PropertySource("classpath:hibernate.properties")
@EnableJpaRepositories
@EnableTransactionManagement
public class JpaConfiguration {
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN =
"entitymanager.packages.to.scan";
@Resource
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(
env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL)); …Run Code Online (Sandbox Code Playgroud) 我在MongoDB中有以下表单的集合.正如您所看到的,有些文档有两个成员"id"和"xid",有些只有1个"id"(除了Object _id)
[
{
"id" : 1,
},
{
"id" : 2,
},
{
"id" : 3
"xid": 300
}
]
Run Code Online (Sandbox Code Playgroud)
我想创建一个mongoexport语句,只输出id为AND xid的文档,其值为xid> 0
我目前有以下命令:
mongoexport -h host -u user -p pass --db database --collection collections --csv --fields id,xid --query '{"xid":{"$ne":0}}' --out rec.csv
Run Code Online (Sandbox Code Playgroud)
但是,这也会导出具有不带xid的id的文档.所以我得到了类似的东西
xid, id
12, 3
,4
14, 5
,3
,2
12, 5
Run Code Online (Sandbox Code Playgroud)
等等
有没有办法导出只有id和xid的文件?
我正在尝试使用javax.json API打印json
我目前使用的代码如下:
private String prettyPrint(String json) {
StringWriter sw = new StringWriter();
try {
JsonReader jr = Json.createReader(new StringReader(json));
JsonObject jobj = jr.readObject();
Map<String, Object> properties = new HashMap<>(1);
properties.put(JsonGenerator.PRETTY_PRINTING, true);
JsonGeneratorFactory jf = Json.createGeneratorFactory(properties);
JsonGenerator jg = jf.createGenerator(sw);
jg.write(jobj).close();
} catch (Exception e) {
}
String prettyPrinted = sw.toString();
return prettyPrinted;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
11:47:08,830 ERROR [stderr] (EJB default - 1) javax.json.stream.JsonGenerationException: write(JsonValue) can only be called in array context
11:47:08,835 ERROR [stderr] (EJB default - 1) at org.glassfish.json.JsonGeneratorImpl.write(JsonGeneratorImpl.java:301) …Run Code Online (Sandbox Code Playgroud) 我有一个AutoCompleteTextView,它通常在用户输入3个字母后提供建议.一旦我触摸建议列表隐藏软键盘,我想要一次.我在下面使用表格布局所做的只有在点击建议列表时才会隐藏键盘.
XML
<TableRow
android:id="@+id/tableRow2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center" >
<AutoCompleteTextView
android:id="@+id/auto_insert_meds"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="15"
android:inputType="textVisiblePassword|textMultiLine"
android:scrollHorizontally="false"
android:text=""
android:textSize="16sp" />
</TableRow>
Run Code Online (Sandbox Code Playgroud)
Java的
TableLayout tbl = (TableLayout) findViewById(R.id.main_table);
tbl.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(v.getWindowToken(), 0);
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
用于自定义列表的XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/medlist_linear_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/med_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollHorizontally="false"
android:padding="3dp"
android:textColor="@android:color/white" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 我想比较两个日期(StartDate和EndDate)并检查一个日期是否在另一个日期之前.最简单的解决方案是在支持bean上执行此操作并将方法"短路".
但是,此验证不会与其他表单验证同时发生.例如,如果我有另一个需要验证的字段(除了日期)并且输入无效,我将只收到该特定字段的消息.只有当其他字段有效时,才会根据辅助bean获取日期验证.
有人有解决方案吗?
我有以下控制器方法:
@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE, value = "session/{id}/exercises")
public ResponseEntity<Resources<Exercise>> exercises(@PathVariable("id") Long id) {
Optional<Session> opt = sessionRepository.findWithExercises(id);
Set<Exercise> exercises = Sets.newLinkedHashSet();
if (opt.isPresent()) {
exercises.addAll(opt.get().getExercises());
}
Link link = entityLinks.linkFor(Session.class)
.slash(id)
.slash(Constants.Rels.EXERCISES)
.withSelfRel();
return ResponseEntity.ok(new Resources<>(exercises, link));
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我试图揭露一个特定Set<>的Exercise实体Session.当exercise实体为空时,我得到一个像这样的JSON表示:
{
"_links": {
"self": {
"href": "http://localhost:8080/api/sessions/2/exercises"
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上没有嵌入式实体,而以下类似的东西是可取的:
{
"_links": {
"self": {
"href": "http://localhost:8080/api/sessions/2/exercises"
}
},
"_embedded": {
"exercises": []
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何执行这个?
我想为一个Employee基本上是findByAllFields查询的实体创建一个REST链接.当然这应该与Page和结合使用Sort.为此,我实现了以下代码:
@Entity
public class Employee extends Persistable<Long> {
@Column
private String firstName;
@Column
private String lastName;
@Column
private String age;
@Column
@Temporal(TemporalType.TIMESTAMP)
private Date hiringDate;
}
Run Code Online (Sandbox Code Playgroud)
所以我想让我们说一下我可以做的查询:
http://localhost:8080/myApp/employees/search/all?firstName=me&lastName=self&ageFrom=20&ageTo=30&hiringDateFrom=12234433235
Run Code Online (Sandbox Code Playgroud)
所以我有以下内容 Repository
@RepositoryRestResource(collectionResourceRel="employees", path="employees")
public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Long>,
JpaSpecificationExecutor<Employee> {
}
Run Code Online (Sandbox Code Playgroud)
好的,现在我需要一个RestController
@RepositoryRestController
public class EmployeeSearchController {
@Autowired
private EmployeeRepository employeRepository;
@RequestMapping(value = "/employees/search/all/search/all", method = RequestMethod.GET)
public Page<Employee> getEmployees(EmployeeCriteria filterCriteria, Pageable pageable) {
//EmployeeSpecification uses CriteriaAPI to form dynamic query with …Run Code Online (Sandbox Code Playgroud) 让我们假设我们有以下实体:
@Entity
public class Department {
@OneToMany(mappedBy="department")
private List<Employee> employees;
}
@Entity
public class Employee {
@ManyToOne
private Department department
}
Run Code Online (Sandbox Code Playgroud)
在更新中我们需要维护关系的两个方面,这是可以理解的,如下所示:
Employee emp = new Employee();
Department dep = new Department();
emp.setDepartment(dep);
dep.getEmployees().add(emp);
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到现在.问题是我应该如下所示在双方应用合并,并且我避免第二次合并级联?
entityManager.merge(emp);
entityManager.merge(dep);
Run Code Online (Sandbox Code Playgroud)
或者正在合并拥有方?这些合并也应该发生在Transaction或EJB中吗?或者在具有分离实体的简单控制器方法上执行它就足够了?
我有一个数据表,它显示基于List <>的各种实体.当我选择一个单元格进行编辑时,我希望能够以某种方式获取实体以便更新它.当然有event.getRowIndex,然后我可以使用List <>,但这并不总是方便的.是否有另一种方法可以从CellEditEvent获取实体?
假设我有以下存储库:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u")
Stream<User> streamAllPaged(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
我想进行搜索:
public Page<User> findAllUsers(Pageable page) {
Page<User> page = null;
try (Stream<User> users = userRepository.streamAllPaged(page)) {
Set<User> users = users.filter(u -> user.getName().equals("foo"))
.collect(Collectors.toSet());
//create page from set?
}
}
Run Code Online (Sandbox Code Playgroud)
显然我可以使用子列表并手动插入页面大小等但我想应该有更"标准"的方法来做到这一点?
java ×4
spring ×4
hibernate ×2
jsf ×2
spring-data ×2
android ×1
date-range ×1
facelets ×1
java-8 ×1
jpa ×1
json ×1
mongodb ×1
primefaces ×1
rest ×1
validation ×1