小编nil*_*lsi的帖子

Spring + Hibernate + H2嵌入式数据库.如何保存数据?

我是嵌入式数据库的新手,但我至少运行它.令我困惑的是我的数据没有在运行之间保存.我的意思是测试不是很好吗?每次运行应用程序时,我都不想将数据添加到我的数据库中

所以我搜索了一种方法来做到这一点,我发现我将配置一个hibernate连接URL,我尝试这样做

props.put("hibernate.connection.url", "jdbc:h2:~/test");
Run Code Online (Sandbox Code Playgroud)

在我的HibernateConfiguration.java中.虽然没有成功,但没有错误但也没有保存,我没有找到应该从该URL创建的测试文件.(运行Windows并检查我的用户文件夹)

我也看到它可以像这样做

<jdbc:embedded-database id="dataSource" type="H2">
    <jdbc:script location="classpath:db-schema.sql"/>
    <jdbc:script location="classpath:db-test-data.sql"/>
</jdbc:embedded-database>
Run Code Online (Sandbox Code Playgroud)

并且每次运行应用程序时都执行脚本,但问题是我希望hibernate处理所有表的创建等.

这通常是怎么做的?

我现在搜索了几个小时,但还没有得到它.

PS.如果需要我会发布我的所有配置.

编辑: 更新了我的问题以包含对一个问题的关注并包括我的配置.

HibernateConfiguration.java包com.courseinfo.project;

import java.util.Properties;

import javax.sql.DataSource;

import org.hibernate.dialect.H2Dialect;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate3.HibernateTransactionManager;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;

import com.courseinfo.project.model.Course;

@Configuration
public class HibernateConfiguration {

    @Value("#{dataSource}")
    private DataSource dataSource;

    @Bean
    public AnnotationSessionFactoryBean sessionFactoryBean() {
        Properties props = new Properties();
        props.put("hibernate.dialect", H2Dialect.class.getName());
        props.put("hibernate.format_sql", "true");
        props.put("hibernate.connection.url", "jdbc:h2:~/test");

        AnnotationSessionFactoryBean bean = new AnnotationSessionFactoryBean();
        bean.setAnnotatedClasses(new Class[]{Course.class});        
        bean.setHibernateProperties(props);
        bean.setDataSource(this.dataSource);
        bean.setSchemaUpdate(true);
        return bean;
    }

    @Bean
    public HibernateTransactionManager …
Run Code Online (Sandbox Code Playgroud)

spring hibernate spring-mvc h2 embedded-database

5
推荐指数
1
解决办法
7357
查看次数

Meteor blaze按数组索引选择特定项

有没有办法在流星大火中的每个块助手中访问数组索引?

我正在寻找这样的东西.

{{#each myarray}}
    {{this.arrayIndex3}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

meteor meteor-blaze

5
推荐指数
1
解决办法
1603
查看次数

NotificationCompat setSound(sound, STREAM_ALARM) 不工作

我正在构建一个 ping 功能,用于通过蓝牙查找丢失的手机。我需要手机发出声音,即使它被设置为静音/静音,就像闹钟通常的工作方式一样。我以为我可以把streamtype我的notificationAudioManager.STREAM_ALARM但它不工作。只有当电话声音打开时才会响起。我是这样设置的:

NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
builder.setSmallIcon(R.drawable.ic_spenwallet)
        .setContentTitle("Ping")
        .setContentText("Device is trying to find your phone.")
        .setAutoCancel(false)
        .setSound(sound, STREAM_ALARM)
        .setVibrate(vibratePattern)
        .addAction(cancelAction);
Run Code Online (Sandbox Code Playgroud)

如果我尝试:

    Notification notification = builder.build();
    notification.audioStreamType = AudioManager.STREAM_ALARM;
Run Code Online (Sandbox Code Playgroud)

我从 Android Studio 收到一条警告,说 audioStreamType 已被弃用。是这种情况吗?notificaiton即使打开静音模式,还有其他方法可以发出声音吗?(最好也振动)

我通过为此目的创建专用媒体播放器来使其工作,但我认为不需要这样做。无论如何,我是这样做的:

    MediaPlayer mediaPlayer = new MediaPlayer();
    final String packageName = getApplicationContext().getPackageName();
    Uri sound = Uri.parse("android.resource://" + packageName + "/" + R.raw.ping_sound);

    try {
        mediaPlayer.setDataSource(this, sound);
    } catch (IOException e) {
        e.printStackTrace();
    }

    final AudioManager audioManager = …
Run Code Online (Sandbox Code Playgroud)

audio android android-notifications android-permissions

5
推荐指数
1
解决办法
2136
查看次数

@InitBinder与@RequestBody在Spring 3.2.4中转义XSS

@RequestBody在我的方法中有一个带注释的参数,如下所示:

@RequestMapping(value = "/courses/{courseId}/{name}/comment", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public @ResponseBody CommentContainer addComment(@PathVariable Long courseId,
                          @ActiveAccount Account currentUser,
                          @Valid @RequestBody AddCommentForm form,
                          BindingResult formBinding,
                          HttpServletRequest request) throws RequestValidationException {

.....
}
Run Code Online (Sandbox Code Playgroud)

然后我@InitBinder在同一个控制器中有一个带注释的方法:

@InitBinder
public void initBinder(WebDataBinder dataBinder) {
    dataBinder.registerCustomEditor(AddCommentForm.class, new StringEscapeEditor());
}
Run Code Online (Sandbox Code Playgroud)

StringEscapeEditor没跑.但我的initBinder方法是.所以它没有将我的表单映射到转义编辑器.这似乎是在阅读此线程后(似乎@RequestMapping不支持@InitBinder):

处理ajax请求时不调用spring mvc @InitBinder

我测试了映射@PathVariable字符串,然后我的编辑器正在工作.

这在我的应用程序中是一个大问题,因为我的大多数绑定都已完成,@RequestBody如果我可以应用一些自定义绑定,那将是很好的.

解决这个问题最常用的方法是什么?并且为了脚本攻击而逃避我的输入数据.

ajax spring spring-mvc spring-data

4
推荐指数
1
解决办法
9374
查看次数

到达用户ID而不通过每个控制器

我有一个设计问题,我不知道如何解决.我正在使用Spring 3.2.4和Spring security 3.1.4.

我的数据库中有一个Account表,如下所示:

create table Account (id identity,
                        username varchar unique,
                        password varchar not null,
                        firstName varchar not null, 
                        lastName varchar not null,
                        university varchar not null,
                        primary key (id));
Run Code Online (Sandbox Code Playgroud)

直到最近,我的用户名只是一个用户名,但我将其更改为电子邮件地址,因为许多用户想要使用该用户名登录.

我有一个标题,我在我的所有页面上都包含了一个链接到用户配置文件,如下所示:

<a href="/project/users/<%= request.getUserPrincipal().getName()%>" class="navbar-link"><strong><%= request.getUserPrincipal().getName()%></strong></a>
Run Code Online (Sandbox Code Playgroud)

问题是现在<%= request.getUserPrincipal().getName()%>返回电子邮件,我不想将用户链接到他们的电子邮件.相反,我想使用每个用户必须链接到配置文件的ID.

如何从每个页面访问用户ID?

我一直在考虑两种解决方案,但我不确定:

  1. 更改主体以包含id,不知道如何执行此操作并在查找有关该主题的良好信息时遇到问题.
  2. 将模型属性添加到包含整个用户的所有控制器,但这样做真的很难看.

Account account = entityManager.find(Account.class, email);
model.addAttribute("account", account);

还有更多方法,我不知道哪个更喜欢.

我希望它足够清楚,谢谢你对此的任何帮助.

======根据回答编辑=======

我编辑了Account以实现UserDetails,它现在看起来像这样(稍后会修复自动生成的东西):

@Entity
@Table(name="Account")
public class Account implements UserDetails {

    @Id
    private int id;

    private String username;

    private String password;

    private String firstName;

    private …
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc spring-security principal

2
推荐指数
1
解决办法
2093
查看次数

使用类更改所有div以适合具有最多内容的div

这有点难以解释,但我会尝试.

有没有一种简单的方法可以将具有相同类的所有div的宽度设置为具有最多内容的div的宽度.

例如,如果我有三个具有相同类的div我希望它们都具有宽度最大的那个:

+------------+
|asddasadsdsa|
+------------+
|asdadsdsas  |
+------------+
|            |
+------------+
Run Code Online (Sandbox Code Playgroud)

或者像这样:

+---------+
|asd      |
+---------+
|         |
+---------+
|adsaaaaaa|
+---------+
Run Code Online (Sandbox Code Playgroud)

一种表,但在我的情况下,div分布在不同的列表中.

html javascript css jquery

1
推荐指数
1
解决办法
137
查看次数

Spring Application - 将Amazon S3上的图像发送到客户端

我正在构建一个托管在Elastic Beanstalk上的Spring Web应用程序.我使用S3存储用户上传的图像,效果很好.我不明白的是如何从S3获取图像到客户端工作.我发现了三种选择.

1.获取控制器中的图像并将其发送给客户端.像这样:

S3Object object = amazonS3Client.getObject("bucketname", "path/to/image");
Run Code Online (Sandbox Code Playgroud)

2.打开所有图像并通过客户端中的URL直接访问它.像这样的东西:

 <img src="http://aws.amazon.com/bucket/path/to/image.jpg">
Run Code Online (Sandbox Code Playgroud)

3.使用仅在特定时间工作的签名下载URL.像这样:

GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest("bucketname", "path/to/image");
String url = conn.generatePresignedUrl(request)
Run Code Online (Sandbox Code Playgroud)

我不知道采用哪种方法.通过Web服务器路由它似乎是不必要的,因为它加载服务器.由于任何人都可以使用图像,因此可以向任何人打开URL以获得更高的请求和成 而第三种方式对我来说是新的,没有真正看过任何人这样做,这让我感到不安全,如果真的是这样的话.

那么,这通常是怎么做的?

这是如何在开发环境和生产环境中使用的.我想它没变化?或者在开发过程中使用弹簧轮廓来改变静态内容的位置并且仅使用S3进行生产是很常见的?

如果您在S3上托管Javascript,CSS,那么最常见的是采用方法2并为每个人打开它们吗?

html spring spring-mvc amazon-s3 amazon-web-services

1
推荐指数
1
解决办法
2153
查看次数

-2
推荐指数
1
解决办法
832
查看次数