1

アプリケーションを AWS と Openshift にデプロイしようとしまし/usersたが、POST 後に GET エンドポイントにアクセスしようとするまで、アプリケーションは正常に動作しているようです (会社データなしで保存されたユーザー)。
戻り値:

予期しないエラーが発生しました (タイプ = 内部サーバー エラー、ステータス = 500)。
ステートメントを準備できませんでした。SQL [company0_.users_id を users_id1_8_0_ として、company0_.companies_id を company2_8_0_ として、company1_.id を id1_0_1_ として、company1_.contact_id を contact_4_0_1_ として、company1_.gallery_id を gallery_5_0_1_ として、company1_.active を active2_0_1_ として、company1_.promoted0_location_id_location_id_を company1_6 として選択します。 、company1_.profile_id を profile_7_0_1_ として、company1_.subscription_id を subscrip8_0_1_ として、contact2_.id を id1_1_2_ として、contact2_.email を email2_1_2_ として、contact2_.phone を phone3_1_2_ として、gallery3_.id を id1_2_3_ として、location4_.id を id1_3_4_ として、location4_.address を address2_3_4_ として、 .city は city3_3_4_、location4_.country は country4_3_4_、location4_.country_code は country_5_3_4_、location4_.latitude は latitude6_3_4_、location4_.longitude は longitud7_3_4_、profile5_.id は id1_5_5_、profile5_ です。

ログは次のとおりです。

org.springframework.dao.InvalidDataAccessResourceUsageException:ステートメントを準備できませんでした
原因: java.sql.SQLSyntaxErrorException: ユーザーに権限がないか、オブジェクトが見つかりません: ステートメント内の COMPANIES
原因: org.hsqldb.HsqlException: ユーザーに権限がないか、オブジェクトが見つかりません: COMPANIES

しかし、これらはすべてmysqlを使用するローカルサーバーで完全に機能します。

コントローラー:

@RestController
public class UserController {

     @Autowired
     UserRepository repository;

    @GetMapping(value = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity getUsers() {
     return new ResponseEntity<>(repository.findAll(), HttpStatus.OK);
    }
}

リポジトリ:

@Repository
public interface UserRepository extends JpaRepository<User, String> {
}

ユーザーモデル:

@Entity
@Table(name = "users")
@DynamicUpdate
@EntityListeners(AuditingEntityListener.class)
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false)
    @SerializedName("id")
    private long id;

    @Column(name = "name")
    @SerializedName("name")
    private String name;

    @Column(name = "email", unique = true, updatable = false)
    @SerializedName("email")
    private String email;

    @Column(name = "password")
    @SerializedName("password")
    @JsonIgnore
    private String password;

    @Column(name = "accessToken")
    @SerializedName("accessToken")
    private String accessToken;

    @Column(name = "phoneNumber")
    @SerializedName("phoneNumber")
    private String phoneNumber;

    @Column(name = "createdAt", nullable = false, updatable = false)
    @SerializedName("createdAt")
    @Temporal(TemporalType.TIMESTAMP)
    @CreatedDate
    private Date createdAt;

    @Column(name = "updatedAt", nullable = false)
    @SerializedName("updatedAt")
    @Temporal(TemporalType.TIMESTAMP)
    @LastModifiedDate
    private Date updatedAt;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Company> companies;

    //getters & setters etc
}

会社のモデル:

@Entity
@Table(name = "companies")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false)
    @SerializedName("id")
    private long id;

    @OneToOne(cascade = CascadeType.ALL)
    @SerializedName("profile")
    private Profile profile;

    @OneToOne(cascade = CascadeType.ALL)
    @SerializedName("contact")
    private Contact contact;

    @OneToOne(cascade = CascadeType.ALL)
    @SerializedName("location")
    private Location location;

    @OneToOne(cascade = CascadeType.ALL)
    @SerializedName("gallery")
    private Gallery gallery;

    @OneToOne(cascade = CascadeType.ALL)
    @SerializedName("subscription")
    private Subscription subscription;

    @Column(name = "active", columnDefinition = "tinyint(1) default 0")
    @SerializedName("active")
    private boolean isActive;

    @Column(name = "promoted", columnDefinition = "tinyint(1) default 0")
    @SerializedName("promoted")
    private boolean isPromoted;

    //getters & setters etc
}

アプリケーションのプロパティ:

spring.datasource.url=jdbc:mysql://host:3306/database
spring.datasource.username=user
spring.datasource.password=password

spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext

この問題の原因は何ですか?また、上で述べたように、これはローカル マシンで問題なく動作します。

更新(exp.User/Company、Company/Profile、Company/Contact など) ユーザーを db に保存するときに、リレーション内のすべてのオブジェクトのデータを提供しないと、このエラーが発生するようです。

4

0 に答える 0